CMAKE之add_dependencies使用

时间:2025-03-27 10:56:43

CMAKE之add_dependencies使用

  • 问题引入
  • 问题解决
  • 总结

问题引入

在项目中通常会遇见这样的情况:(例如一个项目中有:main),当项目过小的时候,编译顺序是*.a,然后是main,但是当一个项目的文件过于庞大,就会导致编译的顺序不会按照主CMAKEadd_subdirectory引入的先后顺序,为了解决这一问题,就需要使用add_dependencies进行依赖指定。


问题解决

该样例的工程结构如下:

├── // 下面用主CMAKE表示
├── hello
│   ├── 		// 下面用HELLOCMAKE表示
│   ├── 
│   └── 
├── main
│   ├── 		// 下面用MAINCMAKE表示
│   └── 
└── world
    ├── 		// 下面用WORLDCMAKE表示
    ├── 
    └── 

HELLOCMAKE的内容:

cmake_minimum_required(VERSION 3.5.1)

set(CMAKE_C_STANDARD 99)

add_library(hello STATIC  )

MAINCMAKE的内容

cmake_minimum_required(VERSION 3.5.1)
project(CmakeDemo C)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY /home/lib)
set(CMAKE_C_STANDARD 99)

add_executable(CmakeDemo )

link_directories(/home/lib)

target_link_libraries(
        CmakeDemo
        hello
        world
)

WORLDCMAKE的内容

cmake_minimum_required(VERSION 3.5.1)

set(CMAKE_C_STANDARD 99)

add_library(world STATIC  )

主CMAKE的内容

cmake_minimum_required(VERSION 3.5)

add_subdirectory(main)
add_subdirectory(hello)
add_subdirectory(world)

add_dependencies(CmakeDemo hello world)

  • 注意点提示:
    • 该示例中只有在主CMAKE中使用到add_dependencies
    • add_dependencies中所填写的名字应该是其他CMAKE生成目标的名字。
    • 该示例中如果写成add_dependencies(CmakeDemo )则会报错。

总结

这样写的好处在于,当一个项目构建的时候,由于依赖关系的存在,所以被依赖的项目总是最先构建,这样就不会出现找不到库而报错。