如果处于脚本模式,则进行CMake测试
我想使用相同的cmake文件作为脚本和包含文件 做点什么。做:如果处于脚本模式,则进行CMake测试,cmake,Cmake,我想使用相同的cmake文件作为脚本和包含文件 做点什么。做: function(do_something) # do something endfunction if(CMAKE_IS_SCRIPTING_MODE) # this variable does not exist! do_something() endif 这样,我可以轻松地从CMake项目和shell调用脚本。怎样才能做到这一点呢?我想你正在寻找 在cmake(1)-p脚本模式下运行时,cmake将此变量设置为
function(do_something)
# do something
endfunction
if(CMAKE_IS_SCRIPTING_MODE) # this variable does not exist!
do_something()
endif
这样,我可以轻松地从CMake项目和shell调用脚本。怎样才能做到这一点呢?我想你正在寻找 在cmake(1)-p脚本模式下运行时,cmake将此变量设置为 脚本文件的完整路径。运行时配置CMakeLists.txt 文件,未设置此变量
虽然CMAKE_脚本_模式_文件正常,但不能简单地检查是否已设置。从脚本中包含此文件时,可能会遇到问题 例如: 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”。但是,当脚本文件为HelloWorld.cmake
时,您只需要执行HelloWorld()
因此,必须检查此文件是否为脚本文件:
if(CMAKE_SCRIPT_MODE_FILE MATCHES HelloWorld)
或者更好(因为您可以复制并粘贴它):
通过这种方式,我们可以检查我们是否处于脚本模式,以及是否直接调用了我们(不包括在内)。很抱歉提出这一问题,但最初的问题中没有反映这种详细说明,根据我两个多月前提供的答案来看,将其裁剪成一个答案有点不公平。此外,引用的文档清楚地说明了变量的内容被设置为脚本文件的完整路径,因此您可以在适当的测试中使用它(就像您所做的那样),最终再次使用
CMAKE_script_MODE_file
。好吧,让我们说这是一种不同的方法。顺便说一句:if(不是CMAKE\u PARENT\u LIST\u文件)
对于大多数情况(甚至对于原始问题)都足够了。
if(CMAKE_SCRIPT_MODE_FILE AND NOT CMAKE_PARENT_LIST_FILE)