假设有以下目录结构:
root
|
+--projects
| |
| +-test
| |
| +-CMakeFiles.txt
|
+--libs
|
+-testlib
|
+-CMakeFiles.txt
test
包含CMakeFiles.txt
,testlib
也包含CMakeFiles.txt
。 “test”生成一个可执行文件,“testlib”生成一个静态库。
我希望“test”与“testlib”链接而不使用符号链接,也不需要将“testlib”库移动到“test”中的子目录中。
因为“testlib”不是“test”的子目录,所以我无法做到
add_subdirectory("../../libs/testlib")
在测试中CMakeFiles.txt
- CMake会抱怨“testlib”不在“test”子目录中。
另外,因为系统有几个不同的编译器,我不能简单地将“testlib”库安装到某种中心目录中,所以我希望test
编译testlib
的本地副本并链接用它(即好像testlib
是一个子目录)。我还希望“test”项目能够自动重建“testlib”(如果已经更改)。
那么,我该如何处理呢?我在Windows XP SP3上使用CMake 2.8.4。
答案 0 :(得分:19)
您可以在root
中提供顶级CMakeLists.txt,或者为add_subdirectory
命令提供二进制目录; e.g。
add_subdirectory("../../libs/testlib" "${CMAKE_CURRENT_BINARY_DIR}/testlib_build")
这将在您当前的构建目录中创建一个名为testlib_build
的子目录,其中包含为testlib生成的项目文件,但不包含源。
有关详细信息,请运行
cmake --help-command ADD_SUBDIRECTORY
答案 1 :(得分:13)
我看到这样做的唯一方法 - 在root中创建CMakeLists.txt
并将以下代码放在那里:
add_subdirectory(projects/test)
add_subdirectory(lib/testlib)
完成此操作后,您可以在target_link_libraries(test testlib)
中执行test/CMakeLists.txt
,如果您在testlib
中更改内容,则会自动重建。{/ p>