2013-03-13 19 views
8

Mam ten kod w cmake:CUpewnij ZDEFINIOWANE nie wydaje się rozpoznać zmienna

#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}) 

env var BOOST_HOME określone (/ home/ferran/Boost). Zachowanie jest bardzo dziwne, bo wyjście jest:

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


-- Configuring incomplete, errors occurred! 

Tak, var istnieje i wydrukowanie jej zawartości i jednocześnie nie istnieje?

+0

Jak ustawić '$ ENV {BOOST_HOME}'? –

Odpowiedz

21

Trzeba unikać dereferencji zmiennej BOOST_DIR w rachunku if:

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() 

Przez dereferencing BOOST_DIR, jesteś skutecznie zapytań jeśli CUpewnij ma zmienną o nazwie /home/ferran/boost zdefiniowany.

+0

To nie działa. Wydaje się, że w przypadku, gdy "$ ENV {BOOST_HOME}" nie jest zdefiniowane, BOOST_DIR jest ustawione na puste, ale zdefiniowane. Mam rozwiązać za pomocą "if (zdefiniowany ENV {BOOST_HOME})" – Killrazor

+1

Tak - przepraszam. Dzieje się tak, ponieważ '" $ ENV {BOOST_HOME} "' ma znaki cudzysłowu. Gdyby ich tam nie było i '$ ENV {BOOST_HOME}' nie został zdefiniowany, wówczas 'BOOST_DIR' również nie zostałoby zdefiniowane. Jednak cudzysłowy są konieczne, jeśli wartość 'BOOST_HOME' zawiera spację. Zaktualizowałem odpowiedź z nieco inną poprawką do twojej. Powinno być dobrze. – Fraser

Powiązane problemy