it-swarm.com.de

Wie überprüfe ich, ob eine Umgebungsvariable in cmake gesetzt ist?

Ich habe eine Umgebungsvariable in meinem bash-Profil festgelegt, sodass ich sie im Terminal gut sehen kann. . 

bla/baut $ echo $ THING

ding

Wie zeige ich es in einer cmake-Nachricht an und überprüfe, ob es eingestellt ist? Ich habe Folgendes ausprobiert, aber es zeigt nur das Objekt als leer an und überspringt den Rumpf der if-Anweisung

message("THING:" $ENV{THING})
if(DEFINED ENV{THING})
    message(STATUS "THING environment variable defined")
    # some more commands
endif()
18
learnvst

Ihr CMake-Code ist korrekt. Das Problem ist höchstwahrscheinlich, dass Sie in der Shell nur die Umgebungsvariable setzen, aber nicht export. Führen Sie vor dem Aufruf von cmake Folgendes aus:

export THING
6
kynan

Ich habe das gemacht, aber es funktioniert nicht. CMake kann es nicht erkennen.

export THING

Aber das ist Arbeit.

export THING=on

Vielleicht sollte ich immer einen Standardwert für die Umgebungsvariable angeben.

Sie können die Umgebungszeichenfolge übrigens überprüfen, indem Sie dem CMake-Code folgen.

if( $ENV{THING} STREQUAL "on")
    message(STATUS "THING = " $ENV{THING})
endif()
4
ToyAuthor X

Da ich genau weiß, was export tut und wie die Umgebung im Allgemeinen funktioniert, habe ich immer noch einen Schluck WTFs mit dieser Form:

IF(DEFINED $ENV{THING})

aber es hat in dieser Form gut funktioniert:

IF(DEFINED ENV{THING})

Beachten Sie die $-Auslassung.


N.B. Sie können dies schnell mit cmake -P testen:

[~] 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]--
2
ulidtko

Um es klar zu sagen: wie https://cmake.org/cmake/help/latest/command/if.html sagt:

if (DEFINED ENV{THING})
  # do stuff
endif()

ist die richtige Syntax, kein $ überall.

2
Jan Wilmans