gpt4 book ai didi

脚本模式下的CMake文件继承变量

转载 作者:行者123 更新时间:2023-12-04 07:40:50 37 4
gpt4 key购买 nike

如何从其他 cmake 文件以脚本模式 (-P) 调用 cmake 文件,所以这个“cmake child”知道其父级的所有变量?因为,如果我有很多 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

工作正常!。但是,没有“-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

当然,如果没有 -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)
# test.cmake
include(${CMAKE_BINARY_DIR}/CMakeCacheForScript.cmake)
message("${teststr}")

关于脚本模式下的CMake文件继承变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13712708/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com