2013-03-13 8 views
8

मैं cmake में इस कोड है लगता है:cmake परिभाषित नहीं करता है पहचान करने के लिए चर

#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 परिभाषित किया गया है (/ घर/Ferran/बढ़ावा)। क्योंकि उत्पादन होता है व्यवहार बहुत अजीब है:

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


-- Configuring incomplete, errors occurred! 

तो, वर मौजूद है और उसकी सामग्री को प्रिंट और एक ही समय मौजूद नहीं है पर?

+0

आपने 'EN EN {{BOOST_HOME}' कैसे सेट किया? –

उत्तर

21

आप if बयान में चर BOOST_DIR अपसंदर्भन से बचने की जरूरत:

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

BOOST_DIR अपसंदर्भन करके, आप प्रभावी रूप से क्वेरी करने कर रहे हैं CMake एक चर /home/ferran/boost बुलाया परिभाषित है।

+0

यह काम नहीं करता है। ऐसा लगता है कि "$ ENV {BOOST_HOME}" को परिभाषित नहीं किया गया है, BOOST_DIR खाली पर सेट है, लेकिन परिभाषित किया गया है। मैंने "अगर (परिभाषित ENV {BOOST_HOME})" – Killrazor

+1

हाँ - क्षमा करें का उपयोग करके हल किया है। ऐसा इसलिए है क्योंकि '" $ ENV {BOOST_HOME} "' उद्धरण चिह्न हैं। अगर वे वहां नहीं थे और 'ENV {BOOST_HOME} 'परिभाषित नहीं किया गया था, तो' BOOST_DIR' भी परिभाषित नहीं किया जाएगा। हालांकि, 'BOOST_HOME' के मान में एक स्थान शामिल होने पर उद्धरण चिह्न आवश्यक हैं। मैंने जवाब को थोड़ा अलग फिक्स के साथ अपडेट कर दिया है। या तो ठीक होना चाहिए। – Fraser

संबंधित मुद्दे