gpt4 book ai didi

cmake - 为什么在 CMake 的脚本中不访问变量?

转载 作者:行者123 更新时间:2023-12-04 13:09:30 24 4
gpt4 key购买 nike

我有一个名为“ install_copy_dlls.cmake ”的脚本,它被调用从顶级cmake文件执行,如下所示。

安装(脚本“install_copy_dlls.cmake”)

并且,我有一个名为“ USE_OSG_STATIC ”的变量,如果我使用静态编译的 OpenSceneGraph,它被设置为 ON,如果我使用动态编译的 OpenSceneGraph,它被设置为 OFF。

我需要在 install_copy_dlls.cmake 脚本中使用这个变量。

所以,这是 install_copy_dlls.cmake 文件的样子。

复制其他所需的dll...

if(NOT USE_OSG_STATIC)//如果是动态OSG

复制 osg dll

在这里,我尝试使用“消息”来打印 USE_OSG_STATIC 变量,但它不打印任何内容。

谁能解释一下为什么我不能在脚本文件中使用变量?

最佳答案

Can anyone explain me why I can not use variables in Script file?
install(SCRIPT ...)命令的作用类似于 cmake -P .所以没有变量转发
从父脚本到子脚本(直到您明确定义一个):
> cat run.cmake 
if(A)
message("A: ${A}")
else()
message("A is empty")
endif()
> cmake -P run.cmake
A is empty
> cmake -DA=15 -P run.cmake
A: 15

使用 CMakeLists.txt :
> cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
set(A 43)
execute_process(COMMAND ${CMAKE_COMMAND} -P run.cmake)
> cmake -H. -B_builds
A is empty

转发到子进程:
> cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
set(A 43)
execute_process(COMMAND ${CMAKE_COMMAND} -DA=${A} -P run.cmake)
> cmake -H. -B_builds
A: 43

解决方案#1(转发)

使用 install(CODE ...)您可以为 run.cmake 定义变量的命令脚本:
> cat CMakeLists.txt
install(
CODE
"execute_process(
COMMAND
${CMAKE_COMMAND}
-DA=${A}
-P
${CMAKE_CURRENT_LIST_DIR}/run.cmake
)"
)
> cmake -H. -B_builds -DA=554
> cmake --build _builds --target install
Install the project...
-- Install configuration: ""
A: 554

解决方案#2(配置)

您可以使用 configure_file 配置安装脚本命令:
> cat run.cmake.in 
set(A @A@)

if(A)
message("A: ${A}")
else()
message("A is empty")
endif()
> cat CMakeLists.txt
set(custom_script ${PROJECT_BINARY_DIR}/custom_install_scripts/run.cmake)
configure_file(run.cmake.in ${custom_script} @ONLY)
install(SCRIPT ${custom_script})
> cmake -H. -B_builds -DA=42
> cmake --build _builds --target install
Install the project...
-- Install configuration: ""
A: 42

关于cmake - 为什么在 CMake 的脚本中不访问变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20792802/

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