cmake DEFINED does not seems to recognize variable-Collection of common programming errors

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?

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

    set(BOOST_DIR "$ENV{BOOST_HOME}")
    if(BOOST_DIR)               #

Originally posted 2013-11-09 23:23:10.