是否可以使用add_subdirectory设置cmake变量?

时间:2014-12-19 16:59:27

标签: cmake

我目前正在使用add_subdirectory(${CMAKE_SOURCE_DIR}/ext/glfw)将glfw添加到我的项目中。

问题在于,一旦我做了cmake ..&&让它始终构建所有示例,我不希望这种情况发生。

在glfw的cmake文件中有

option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" ON)

是否可以从我的CMakeLists.txt中将此变量设置为OFF

1 个答案:

答案 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的文件中。在setoption命令中设置任何内容之前,CMake将始终使用它在此处找到的值。