【发布时间】:2013-11-27 10:04:32
【问题描述】:
有没有设置子目录的选项?
所以我有一个依赖子项目的项目,子项目有一个选项: OPTION(WITH_FUNCTION_X "启用 X 功能" ON)
在我的父项目中,我想包含子项目,但没有 X 功能。
谢谢!
【问题讨论】:
标签: cmake
有没有设置子目录的选项?
所以我有一个依赖子项目的项目,子项目有一个选项: OPTION(WITH_FUNCTION_X "启用 X 功能" ON)
在我的父项目中,我想包含子项目,但没有 X 功能。
谢谢!
【问题讨论】:
标签: cmake
CMake 的option 命令或多或少地向缓存中添加了一个布尔变量。
如果你想覆盖一个选项的默认值,只需在拉入子项目之前自己添加一个同名的变量到缓存中:
set(WITH_FUNCTION_X OFF CACHE BOOL "enable X functionality")
add_subdirectory(subproject)
请注意,如果缓存中已经存在该名称的值,set 命令不会执行任何操作。如果要覆盖任何现有值,请在该命令中添加 FORCE 选项。
FORCE 示例
set(WITH_FUNCTION_X OFF CACHE BOOL "enable X functionality" FORCE)
add_subdirectory(subproject)
【讨论】:
set() 在 Mac 和 Linux 上的 CMake 之间有不同的效果(或者可能是不同的版本?!?)。今天我自己打了这个,让我发疯,直到我使用CACHE BOOL "text" 选项进行设置。如果没有CACHE,它在 Mac 上运行良好,但在 Linux 上不行。
INTERNAL 而不是 BOOL,例如 set(WITH_FUNCTION_X OFF CACHE INTERNAL "" FORCE)