我想使用与脚本相同的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中调用脚本。该怎么办?
答案 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)
通过这种方式,我们检查我们是否处于脚本编写模式下并且是否直接被调用(不包括在内)。