CMake将目标作为项目的一部分并独立构建

时间:2018-03-07 00:49:00

标签: c++ cmake

我正在尝试为平台编写CMakeLists.txt。该平台有多个项目,共享一些库并拥有自己的可执行文件。我希望能够构建整个项目,以及项目内的各个可执行文件。

out-of-source root build可以正常工作:

mkdir root-build && cd root-build && cmake ../root

源外可执行构建不起作用:

mkdir ui-build && cd ui-build && cmake ../root/project1/ui

我目前的目录结构如下:

root/
+-- CMakeListst.txt
+-- lib/
    +-- CMakeLists.txt
    +-- sharedLib1/
        +-- CMakeLists.txt
    +-- sharedLIb2/
        +-- CMakeLists.txt
+-- project1/
    +-- CMakeLists.txt
    +-- ui/
        +-- CMakeLists.txt
    +-- executable1/
        +-- CMakeLists.txt
    +-- shared/
        +-- CMakeLists.txt
+-- project2/
    +-- CMakeLists.txt
    +-- executable/
        +-- CMakeLists.txt

我当前的项目结构构建了所有目标和库作为项目的一部分,但我无法弄清楚如何单独构建可执行文件。

项目的主要cmake文件是root/project*/CMakeLists.txt。此文件INCLUDES root/CMakeLists.txt,对所有项目执行一些通用设置(例如,为第三方库设置CMAKE_MODULE_PATHfind_package。项目cmake文件还为每个可执行文件和add_subdirectory调用add_subdirectory(../lib libs)

这允许可执行文件链接到root/lib子目录中定义的任何目标。如果我然后尝试独立于项目构建可执行文件,CMake将无法找到可执行文件需要链接的目标。是否有一个优雅的解决方案/模式,允许这个?我想到的一种方法是从ui / CMakeLists.txt中只用add_subdirectory(../../ root),使用类似标题保护的东西来阻止无限的add_subdirectory循环。

1 个答案:

答案 0 :(得分:0)

使用make executable1(例如)构建单个目标。