Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
585 views
in Technique[技术] by (71.8m points)

cmake DEFINED does not seems to recognize variable

I have this code in 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})

The env var BOOST_HOME is defined (/home/ferran/boost). The behavior is very odd because the output is:

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


-- Configuring incomplete, errors occurred!

So, the var exists and prints its contents and at the same time does not exists?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You need to avoid dereferencing the variable BOOST_DIR in the if statement:

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

By dereferencing BOOST_DIR, you're effectively querying if CMake has a variable called /home/ferran/boost defined.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...