我目前正在使用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
命令中设置的任何内容之前找到的值.
归档时间: |
|
查看次数: |
1997 次 |
最近记录: |