2013-03-13 7 views
8

ich diesen Code in Cmake haben:Cmake DEFINIERT tut scheint nicht zu erkennen Variable

#mandatory 
SET(BOOST_DIR "$ENV{BOOST_HOME}") 
if (DEFINED ${BOOST_DIR}) 
    #global include directories 
    include_directories(${BOOST_DIR}) 
else(DEFINED ${BOOST_DIR}) 
    message(STATUS "BOOST_HOME at ${BOOST_DIR}") 

    message(FATAL_ERROR "Undefined BOOST_HOME env var.") 
endif(DEFINED ${BOOST_DIR}) 

Das env var BOOST_HOME definiert ist (/ home/Ferran/Boost). Das Verhalten ist sehr seltsam, weil der Ausgang ist:

-- BOOST_HOME at /home/ferran/boost 
CMake Error at CMakeLists.txt:14 (message): 
    Undefined BOOST_HOME env var. 


-- Configuring incomplete, errors occurred! 

Also, die var existiert und druckt dessen Inhalt und zugleich nicht existiert?

+0

Wie hast du '$ ENV {BOOST_HOME}' gesetzt? –

Antwort

21

Sie benötigen dereferencing die Variable BOOST_DIR in der if Anweisung zu vermeiden:

set(BOOST_DIR "$ENV{BOOST_HOME}") 
if(BOOST_DIR)    # <--- Use 'BOOST_DIR', not 'DEFINED ${BOOST_DIR}' 
    #global include directories 
    include_directories(${BOOST_DIR}) 
else() 
    message(STATUS "BOOST_HOME at ${BOOST_DIR}") 
    message(FATAL_ERROR "Undefined BOOST_HOME env var.") 
endif() 

von dereferencing BOOST_DIR, sind Sie effektiv die Abfrage, ob CMake eine Variable namens /home/ferran/boost definiert hat.

+0

Es funktioniert nicht. Wenn "$ ENV {BOOST_HOME}" nicht definiert ist, wird BOOST_DIR auf "leer" gesetzt, aber definiert. Ich habe es gelöst mit "if (DEFINED ENV {BOOST_HOME})" – Killrazor

+1

Ja - tut mir leid. Das liegt daran, dass "$ ENV {BOOST_HOME}" 'die Anführungszeichen hat. Wenn diese nicht vorhanden wären und "$ ENV {BOOST_HOME}" nicht definiert wäre, wäre auch "BOOST_DIR" nicht definiert. Die Anführungszeichen sind jedoch erforderlich, wenn der Wert von "BOOST_HOME" ein Leerzeichen enthält. Ich habe die Antwort mit einer etwas anderen Lösung aktualisiert. Es sollte in Ordnung sein. – Fraser

Verwandte Themen