web-dev-qa-db-fra.com

Comment vérifier si une variable d'environnement est définie dans cmake

J'ai défini une variable d'environnement dans mon profil bash afin que je puisse bien la voir dans le terminal . 

bla/construit $ echo $ THING

truc

Comment puis-je l'afficher dans un message cmake et vérifier s'il est défini? J'ai essayé ce qui suit, mais il affiche simplement chose comme vide et saute le corps de l'instruction if

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

Votre code est correct. Le problème est probablement que vous n'avez que défini la variable d'environnement dans votre shell mais que vous n'avez pas exporté. Exécutez ce qui suit avant d'appeler cmake:

export THING
6
kynan

J'ai fait ça mais ça ne marche pas. CMake ne peut pas le détecter.

export THING

Mais celui-ci est un travail.

export THING=on

Peut-être que je devrais toujours donner la valeur par défaut pour la variable d'environnement.

En passant, vous pouvez vérifier la chaîne d’environnement en suivant le code CMake.

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

Sachant parfaitement ce que fait export et comment l’environnement fonctionne en général, j’ai encore beaucoup

IF(DEFINED $ENV{THING})

mais cela a bien fonctionné sous cette forme:

IF(DEFINED ENV{THING})

Notez l'omission $.


N.B. vous pouvez rapidement tester ceci en utilisant 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]--
2
ulidtko