CMake测试我是否处于脚本模式

时间:2018-07-19 16:18:42

标签: cmake

我想使用与脚本相同的cmake文件和包含文件

do_something.cmake:

function(do_something)
   # do something
endfunction

if(CMAKE_IS_SCRIPTING_MODE) # this variable does not exist!
   do_something()
endif

这样,我可以轻松地从CMake项目和Shell中调用脚本。该怎么办?

2 个答案:

答案 0 :(得分:2)

我认为您正在寻找CMAKE_SCRIPT_MODE_FILE

  

以cmake(1)-P脚本模式运行时,CMake将此变量设置为   脚本文件的完整路径。运行时配置CMakeLists.txt   文件,则未设置此变量。

答案 1 :(得分:0)

虽然CMAKE_SCRIPT_MODE_FILE没问题,但您不能简单地检查它是否已设置。从脚本中包含此文件时,您可能会遇到问题。

示例:

HelloWorld.cmake

include_guard()
function(hello_world)
   message("Hello World")
endfunction()

if(CMAKE_SCRIPT_MODE_FILE)
   hello_world()
endif()

script.cmake

include(HelloWorld)
hello_world()

这将打印两次“ Hello World”。但是,当hello_world()是脚本文件时,您只想执行HelloWorld.cmake

因此,您必须检查此文件是否为脚本文件:

if(CMAKE_SCRIPT_MODE_FILE MATCHES HelloWorld)

或更好的(因为您可以复制并粘贴):

if(CMAKE_SCRIPT_MODE_FILE AND NOT CMAKE_PARENT_LIST_FILE)

通过这种方式,我们检查我们是否处于脚本编写模式下并且是否直接被调用(不包括在内)。