我目前正在使用add_subdirectory(${CMAKE_SOURCE_DIR}/ext/glfw)glfw添加到我的项目中.
问题是,一旦我做cmake .. &&使它总是构建所有的例子,我不希望这发生.
在glfw的cmake文件中有
option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" ON)
Run Code Online (Sandbox Code Playgroud)
是否可以OFF从我的CMakeLists.txt 设置此变量?
简单地做两个
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Build the GLFW example programs")
Run Code Online (Sandbox Code Playgroud)
在add_subdirectory命令或之前
cmake -DGLFW_BUILD_EXAMPLES:BOOL=OFF ..
Run Code Online (Sandbox Code Playgroud)
在命令行上
例如,给出以下两个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}")
Run Code Online (Sandbox Code Playgroud)
和subdir/CMakeLists.txt
option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" ON)
Run Code Online (Sandbox Code Playgroud)
您会看到以下内容(在构建目录中运行时)
如果没有命令行选项,该option()命令将设置变量
$ rm -rf *
$ cmake ..
...
-- OPT BEFORE =
-- OPT AFTER=ON
-- Configuring done
-- Generating done
Run Code Online (Sandbox Code Playgroud)
打开set()覆盖,命令会覆盖该option()命令
$ rm -rf *
$ cmake .. -DOVERRIDE=ON
...
-- Overriding option
-- OPT BEFORE =OFF
-- OPT AFTER=OFF
-- Configuring done
-- Generating done
Run Code Online (Sandbox Code Playgroud)
您也可以option()直接在命令行上覆盖.
$ rm -rf *
$ cmake .. -DGLFW_BUILD_EXAMPLES=OFF
...
-- OPT BEFORE =OFF
-- OPT AFTER=OFF
-- Configuring done
-- Generating done
Run Code Online (Sandbox Code Playgroud)
请注意,我rm -rf *每次都在构建目录中执行此操作.值的值GLFW_BUILD_EXAMPLES缓存在一个名为的文件中CMakeCache.txt.CMake将始终使用在a set或option命令中设置的任何内容之前找到的值.