17

假设有以下目录结构:

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。

4

2 回答 2

21

您可以在 中提供顶级 CMakeLists.txt root,也可以为命令提供二进制目录add_subdirectory;例如

add_subdirectory("../../libs/testlib" "${CMAKE_CURRENT_BINARY_DIR}/testlib_build")

testlib_build这会在当前构建目录中创建一个名为的子目录,其中包含为 testlib 生成的项目文件,但不包含源代码。

有关更多信息,请运行

cmake --help-command ADD_SUBDIRECTORY
于 2012-04-04T08:52:46.790 回答
14

我看到这样做的唯一方法 -CMakeLists.txt在根目录中创建并将以下代码放在那里:

add_subdirectory(projects/test)
add_subdirectory(lib/testlib)

完成后,您可以target_link_libraries(test testlib)在 中进行test/CMakeLists.txt,如果您在 中更改某些内容,它将自动重建testlib

于 2012-04-04T06:21:28.190 回答