lea*_*vst 28 bash cmake environment-variables
我在bash配置文件中设置了一个环境变量,所以我可以在终端中看到它就好了..
blah/builds $ echo $ THING
啄
如何在cmake消息中显示它并检查它是否已设置?我尝试了以下内容,但它只是显示空白的内容并跳过if语句的主体
message("THING:" $ENV{THING})
if(DEFINED ENV{THING})
message(STATUS "THING environment variable defined")
# some more commands
endif()
Run Code Online (Sandbox Code Playgroud)
uli*_*tko 15
完全export了解环境的一般功能和工作原理后,我仍然对这种形式的WTF感到满意:
IF(DEFINED $ENV{THING})
Run Code Online (Sandbox Code Playgroud)
但它在这种形式下工作正常:
IF(DEFINED ENV{THING})
Run Code Online (Sandbox Code Playgroud)
注意$遗漏。
注意,您可以使用cmake -P以下方法快速进行测试:
[~] cat > test-env.cmake << 'EOF'
IF(DEFINED ENV{FOOBAR})
MESSAGE(STATUS "FOOBAR env seen: --[$ENV{FOOBAR}]--")
ELSE()
MESSAGE(STATUS "WTF")
ENDIF()
EOF
[~]
[~] FOOBAR=test cmake -P test-env.cmake
-- FOOBAR env seen: --[test]--
Run Code Online (Sandbox Code Playgroud)
它表现得如此怪异的原因是一如既往的传统。IF以前在较老的CMake中做疯狂的事情;他们使用CMP0054(以向后兼容的方式)在CMake 3.1中修复了此问题,您必须明确启用它:
CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
PROJECT(...)
CMAKE_POLICY(SET CMP0054 NEW) #-- fixes IF() with quoted args
CMAKE_POLICY(SET CMP0057 NEW) #-- enables IF(.. IN_LIST ..)
Run Code Online (Sandbox Code Playgroud)
kyn*_*nan 11
你CMake代码是正确的.问题很可能是您只在shell中设置环境变量但未导出它.在调用之前运行以下命令cmake:
export THING
Run Code Online (Sandbox Code Playgroud)
只是要清楚:正如https://cmake.org/cmake/help/latest/command/if.html所说:
if (DEFINED ENV{THING})
# do stuff
endif()
Run Code Online (Sandbox Code Playgroud)
是正确的语法,任何地方都没有 $。
| 归档时间: |
|
| 查看次数: |
21212 次 |
| 最近记录: |