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



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

源外根构建工作正常:

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。此文件INCLUDESroot/CMakeLists.txt,它执行一些所有项目通用的设置(例如,为第三方库设置CMAKE_MODULE_PATHfind_package)。项目 cmake 文件还为其中的每个可执行文件和add_subdirectory(../lib libs)调用add_subdirectory

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

例如,使用make executable1来构建单个目标。

相关内容

最新更新