【发布时间】:2018-05-16 22:04:40
【问题描述】:
TL;DR 我基本上想要this question 的模块化解决方案。不仅是一个包含所有内容的解决方案,而且还为每个可执行文件单独提供一个解决方案。
在我的问题here 中,我想知道如何将我的 CMakeLists.txt 拆分到不同的文件夹中。一些文件夹包含将是静态库的代码,而一些代码将是构建在这些静态库上的可执行文件或动态库。
文件夹结构如下:
/path/to/base/
CMakeLists.txt
app1/
<src files for app1>
CMakeLists.txt
app2/
<src files for app2>
CMakeLists.txt
lib/
<src files for lib>
CMakeLists.txt
如果我采取在父文件夹中有一个CMakeLists.txt 的方法到我的所有库和可执行文件,并从包含所有目录中,我遇到的问题是,当我生成每个目标的项目包含的 VS 项目/解决方案时所有项目 - 不仅是我预期目标所必需的项目。
基础文件夹中CMakeLists.txt 的内容:
cmake_minimum_required(VERSION 3.1)
add_subdirectory(lib)
add_subdirectory(app1)
add_subdirectory(app2)
和app1文件夹中的CMakeLists.txt(app2等价)
cmake_minimum_required(VERSION 3.1)
project(app1)
add_executable(app1 <src of app1>)
target_link_libraries(app1 lib)
和 CMakeLists.txt 的 lib:
add_library(lib <src of lib>)
如果我在 CMakeLists.txt 上运行 cmake,则解决方案包含所有项目。即使我只打开一个项目;它也包含一切。 app1 的 VS 项目也构建了 app2 - 这是我不想要的。
如果我只在 app1 的 CMakeLists.txt 上运行 cmake,我会得到一个不包含 app2 但也不包含 lib 的解决方案,因为这只是在 cmake 文件内部链接时提到的,而不是作为目标(它在基本文件中)
【问题讨论】: