假设源树在这个结构中:
/
|- lib1
| |- src.cpp
| |- lib1.h
| |- CMakeLists.txt
|
|- lib2
| |- src.cpp
| |- lib2.h
| |- CMakeLists.txt
|
|- lib3
| |- src.cpp
| |- lib3.h
| |- CMakeLists.txt
|
|- app
| |- src.cpp
| |- CMakeLists.txt
|
|- CMakeLists.txt
假设:
我想:
所以我的问题是:有没有办法以可扩展的方式编写CMakeLists.txt文件以满足上述要求?如果没有,那么是否有一些类似的工具可以做到这一点?
感谢。
答案 0 :(得分:4)
对于1个问题:
在lib2/CMakeLists.txt
中你应该把它放在:
target_link_libraries(lib2 lib1)
在app / CMakeLists.txt中:
target_link_libraries(app lib2)
现在,如果您尝试构建应用程序,CMake将检查lib2是否是最新的,如果不是 - 重建lib1和lib2。
对于2个问题:
您可以根据add_subdirectory(lib3)
变量使用if()
阻止option()
调用{/ p}}。
另一种方式 - 在lib3 / CMakeLists.txt中:
add_library(lib3 ${SRCS} EXCLUDE_FROM_ALL)
这会使CMake不将lib3
目标添加到all
目标中。如果您尝试根据它构建内容,或者手动发出make lib3
,则仍会构建此目标。