如何从其他cmake文件中以脚本模式(-P)调用cmake文件,因此这个"cmake child"知道其父级的所有变量?因为,如果我有很多孩子需要的变量,我必须编写许多-D选项,我想避免它.
例:
// CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
set(teststr "Hello World!")
add_custom_command(test
${CMAKE_COMMAND} -Dteststr=${teststr} -P test.cmake
)
// test.cmake
message("${teststr}")
$ cmake .
$ make test
Hello world!
Built target test
Run Code Online (Sandbox Code Playgroud)
工作良好!.但是,没有"-Dteststr":
// CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
set(teststr "Hello World!")
add_custom_command(test
${CMAKE_COMMAND} -P test.cmake
)
// test.cmake
message("${teststr}")
$ cmake .
$ make test
Built target test
Run Code Online (Sandbox Code Playgroud)
当然,如果没有-D选项,test.cmake中的"teststr"变量将被取消设置,因此输出为空.
在"遗产模式"中调用test.cmake的任何选项,或类似的东西?
据我所知,没有特别简单的方法可以做到这一点。
您可以将父 CMakeLists.txt 中的所有当前变量写入一个单独的文件,然后include将其写入 test.cmake 中:
# CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
set(teststr "Hello World!")
set(CacheForScript ${CMAKE_BINARY_DIR}/CMakeCacheForScript.cmake)
file(WRITE ${CacheForScript} "")
get_cmake_property(Vars VARIABLES)
foreach(Var ${Vars})
if(${Var})
string(REPLACE "\\" "\\\\" ${Var} ${${Var}})
endif()
file(APPEND ${CacheForScript} "set(${Var} \"${${Var}}\")\n")
endforeach()
add_custom_target(test ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/test.cmake)
Run Code Online (Sandbox Code Playgroud)
# test.cmake
include(${CMAKE_BINARY_DIR}/CMakeCacheForScript.cmake)
message("${teststr}")
Run Code Online (Sandbox Code Playgroud)
您可以将参数传递给使用调用的脚本cmake -P。如果您致电:
cmake -P <script-file> <arg3> <arg4> <arg5> ...
Run Code Online (Sandbox Code Playgroud)
那么变量CMAKE_ARGC,CMAKE_ARGV0,CMAKE_ARGV1,...将可用于脚本。请参阅CMAKE_ARGC和CMAKE_ARGV0的文档。
另一种方法是定义变量,就像使用非脚本cmake命令一样。有一件事情:您需要在之前定义变量-P:
cmake -DVAR=VALUE -DFOO=BAR -P <script-file> <arg5> <arg6> ...
Run Code Online (Sandbox Code Playgroud)
同样,并不是脚本文件后的args编号会相应地移动。
| 归档时间: |
|
| 查看次数: |
4584 次 |
| 最近记录: |