【发布时间】:2016-04-08 16:31:10
【问题描述】:
例如,如果我有一个主 CMakeLists,它构建 project 的所有依赖项,然后通过 add_subdirectory( project ) 构建项目本身。
但是如果你尝试通过project/CMakeLists 构建你会失败(因为缺少依赖项)。那么防止这种情况的最佳方法是什么,例如检查给定的 CMakeLists 是否被另一个包含,或者它是否是“根”。
【问题讨论】:
-
check if a given CMakeLists was included by the other or if it's a "root".- 您可以将CMAKE_SOURCE_DIR与CMAKE_CURRENT_SOURCE_DIR进行比较,以检查当前执行的CMakeLists.txt是否是顶级的。通常,适当的 README 文件就足够了 - 使用 CMake,您几乎无法避免所有可能的误用。 -
您可以在根 CMakeLists 中定义一个变量并在子目录中检查它。
-
您可以通过
if (TARGET ...)来检查依赖项目是否已经处理/确实存在。或者,您可以直接使用add_subdirectory()(有其缺点)添加project所需的依赖项,或者将其作为外部项目(有关更多详细信息,请参阅here)。 -
在你的情况下,你的依赖是什么意思?第三方库?如果你在谈论另一个你也编译的库,CMake 会找出依赖关系并在之前构建它们。
-
好吧,我在项目根目录中有一个
CMakeLists,并将所有需要的依赖项添加为子目录,但“问题”是与我的项目相关的大部分内容都位于root/project我添加了一个子目录的文件夹,所以一些用户没有阅读自述文件(不出所料 =))而不是在根文件夹中运行 cmake,而是试图从显然失败的子文件夹构建它(因为它无法链接到未构建的依赖项)。所以我想要一种干净的方法来防止这种用例(也许已经内置了这样做的方法)。
标签: build cmake build-process