CMAKE之add_dependencies使用
- 问题引入
- 问题解决
- 总结
问题引入
在项目中通常会遇见这样的情况:(例如一个项目中有:main
,,
),当项目过小的时候,编译顺序是
*.a
,然后是main
,但是当一个项目的文件过于庞大,就会导致编译的顺序不会按照主CMAKE
的add_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 )
则会报错。
- 该示例中只有在
总结
这样写的好处在于,当一个项目构建的时候,由于依赖关系的存在,所以被依赖的项目总是最先构建,这样就不会出现找不到库而报错。