【发布时间】:2021-07-02 19:39:43
【问题描述】:
假设我有一个分层的 CMake 项目,由 n 不同的项目组成:
CMakeLists.txt
proj-1/CMakeLists.txt
proj-2/CMakeLists.txt
(...)
proj-n/CMakeLists.txt
显然每个项目也会有源文件。
我会确保将所有感兴趣的命令添加到根 CMakeLists.txt 文件中——比如 CMAKE_CXX_STANDARD、enable_testing()、add_compile_options() 等。如果我理解正确,无论哪个选项都包含在根文件中CMakeLists.txt 文件也适用于所有儿童 CMakeLists.txt 文件——如果我错了,请纠正我,因为我指望这种行为。对于每个X = 1, ..., n,根CMakeLists.txt 还包含一个add_subdirectory(proj-X) 语句。
无论如何。假设出于某种原因,我只想构建proj-X 文件夹之一,例如proj-1。也许构建在其他项目之一中被破坏,或者我需要修复proj-1 上的错误,它不依赖于其他项目,并且构建所有项目需要很长时间。
重点是:我想在proj-1/CMakeLists.txt 上运行cmake 而不是在根CMakeLists.txt 文件上运行,但我想确保proj-1 的构建方式完全相同构建,如果我在根 CMakeLists.txt 文件上运行 cmake。这是一个问题,因为根 CMakeLists.txt 包含子 CMakeLists.txt 应该在从根构建它的常规情况下“继承”的语句,但在这种情况下,我直接从 proj-1/CMakeLists.txt 构建(在这种情况下,root CMakeLists.txt 文件不会出现。)
据我了解,一种可能性是将所有选项从根 CMakeLists.txt 文件复制到每个其他 proj-X/CMakeLists.txt 文件。当然,这是一个黑客和维护的噩梦,但我想它会起作用。
还有其他可能的解决方案吗?例如,我可以创建一个包含所有常用选项的文件并将其保存到根目录,然后在每个 proj-X/CMakeLists.txt 文件中执行与 #include 等效的 CMake 吗?是否会因为两次运行相同的命令而出现问题(一次在根 CMakeLists.txt 上,另一次在 proj-X/CMakeLists.txt 文件上,从根开始构建时)?
【问题讨论】: