我目前正在使用add_subdirectory(${CMAKE_SOURCE_DIR}/ext/glfw)
将glfw添加到我的项目中。
问题在于,一旦我做了cmake ..&&让它始终构建所有示例,我不希望这种情况发生。
在glfw的cmake文件中有
option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" ON)
是否可以从我的CMakeLists.txt中将此变量设置为OFF
?
答案 0 :(得分:7)
只需做任何一次
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Build the GLFW example programs")
在add_subdirectory
命令或
cmake -DGLFW_BUILD_EXAMPLES:BOOL=OFF ..
在命令行上
例如,给出以下两个CMake脚本
cmake_minimum_required(VERSION 2.8)
project(test)
set(OVERRIDE FALSE CACHE BOOL "")
if(OVERRIDE)
message(STATUS "Overriding option")
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Build the GLFW example programs")
endif()
message(STATUS "OPT BEFORE =${GLFW_BUILD_EXAMPLES}")
add_subdirectory(subdir)
message(STATUS "OPT AFTER=${GLFW_BUILD_EXAMPLES}")
和subdir / CMakeLists.txt
option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" ON)
您会看到以下内容(在构建目录中运行时
)如果没有命令行选项,option()
命令会设置变量
$ rm -rf *
$ cmake ..
...
-- OPT BEFORE =
-- OPT AFTER=ON
-- Configuring done
-- Generating done
启用覆盖,set()
命令会覆盖option()
命令
$ rm -rf *
$ cmake .. -DOVERRIDE=ON
...
-- Overriding option
-- OPT BEFORE =OFF
-- OPT AFTER=OFF
-- Configuring done
-- Generating done
您也可以直接在命令行上覆盖option()
。
$ rm -rf *
$ cmake .. -DGLFW_BUILD_EXAMPLES=OFF
...
-- OPT BEFORE =OFF
-- OPT AFTER=OFF
-- Configuring done
-- Generating done
请注意,我每次都在构建目录中执行rm -rf *
。 GLFW_BUILD_EXAMPLES
的值缓存在名为CMakeCache.txt
的文件中。在set
或option
命令中设置任何内容之前,CMake将始终使用它在此处找到的值。