假设有以下目录结构:
root
|
+--projects
| |
| +-test
| |
| +-CMakeFiles.txt
|
+--libs
|
+-testlib
|
+-CMakeFiles.txt
Run Code Online (Sandbox Code Playgroud)
test包含CMakeFiles.txt并testlib包含CMakeFiles.txt."test"生成可执行文件,"testlib"生成静态库.
我希望"test"与"testlib"链接,而不使用符号链接,也不需要将"testlib"库移动到"test"中的子目录中.
因为"testlib"不是"test"的子目录,所以我不能这样做
add_subdirectory("../../libs/testlib")
Run Code Online (Sandbox Code Playgroud)
在测试中CMakeFiles.txt- CMake会抱怨"testlib"不在"test"子目录中.
另外,因为系统有几个不同的编译器,我不能简单地将"testlib"库安装到某种中心目录中,所以我想test编译一个本地副本testlib并与之链接(即好像testlib是一个子目录).我还希望"test"项目能够自动重建"testlib"(如果已经更改).
那么,我该如何处理呢?我在Windows XP SP3上使用CMake 2.8.4.
Fra*_*ser 21
您可以在其中提供顶级CMakeLists.txt root,也可以为add_subdirectory命令提供二进制目录; 例如
add_subdirectory("../../libs/testlib" "${CMAKE_CURRENT_BINARY_DIR}/testlib_build")
Run Code Online (Sandbox Code Playgroud)
这将创建一个testlib_build在当前构建目录中调用的子目录,该子目录包含为testlib生成的项目文件,但不包含源.
有关详细信息,请运行
cmake --help-command ADD_SUBDIRECTORY
Run Code Online (Sandbox Code Playgroud)
arr*_*owd 14
我看到这样做的唯一方法 - CMakeLists.txt在root中创建并在其中放入以下代码:
add_subdirectory(projects/test)
add_subdirectory(lib/testlib)
Run Code Online (Sandbox Code Playgroud)
当你这样做,你可以做target_link_libraries(test testlib)的test/CMakeLists.txt,它将如果你改变的东西自动重建testlib.
| 归档时间: |
|
| 查看次数: |
10008 次 |
| 最近记录: |