Kan*_* Li 5 c++ build-automation cmake
假设源树的结构如下:
/
|- 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
Run Code Online (Sandbox Code Playgroud)
认为:
我想:
所以我的问题是:有没有办法以可扩展的方式编写CMakeLists.txt文件来满足上述要求?如果没有的话,有没有类似的工具可以做到这一点?
谢谢。
对于1个问题:
你lib2/CMakeLists.txt应该把这个:
target_link_libraries(lib2 lib1)
Run Code Online (Sandbox Code Playgroud)
在 app/CMakeLists.txt 中:
target_link_libraries(app lib2)
Run Code Online (Sandbox Code Playgroud)
现在,如果您尝试构建应用程序,CMake 将检查 lib2 是否是最新的,如果不是,则重建 lib1 和 lib2。
对于2个问题:
您可以使用基于变量的块add_subdirectory(lib3)来保护调用。if()option()
另一种方式 - 在 lib3/CMakeLists.txt 中:
add_library(lib3 ${SRCS} EXCLUDE_FROM_ALL)
Run Code Online (Sandbox Code Playgroud)
这将使 CMake 不将lib3目标添加到all目标中。如果您尝试构建依赖于它的东西,或者make lib3手动发出问题,仍然会构建该目标。
| 归档时间: |
|
| 查看次数: |
4862 次 |
| 最近记录: |