【发布时间】:2013-05-14 21:00:10
【问题描述】:
我的应用程序由核心、许多共享库和许多使用这些共享库的插件组成。我正在使用 cmake option() 命令来启用/禁用每个插件。
我想做的是仅在启用的插件之一需要共享库时构建和安装共享库。
我尝试在共享库的目录中使用以下内容:
set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL true)
但是,目标仍在 Visual Studio 中构建。 Linux 中的 GNU make 正确地避免了构建它们。但是,不再使用install() 安装所需的库
系统。
我还尝试将EXCLUDE_FROM_DEFAULT_BUILD false 添加到库目标中,
但 cmake 抱怨 install() 的未定义行为与禁用目标。
【问题讨论】:
-
当我想选择性地包含子目录时,我将
add_subdirectory代码包装在if语句中。在你的情况下这可能吗? -
不,我不这么认为。如果由于我没有调用
add_subdirectory而导致目标尚不存在,我怎么知道某事是否取决于目标? -
我明白了。我不知道你需要 CMake 来为你确定依赖关系......对于我的项目,我提前知道这一点,所以我不必以编程方式进行。
-
很难提前知道,因为有很多插件并且库(或其
add_subdirectory)不应该知道特定插件是否使用它。此外,如果它被禁用,省略add_subdirectory会导致无法手动构建库。 -
在 Main CMakeLists.txt 的末尾添加 if(target) add_dependencies() 语句怎么样?在这一点上,您最有可能知道存在哪些目标。
标签: cmake