16

我在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})

环境变量 BOOST_HOME 已定义(/home/ferran/boost)。行为很奇怪,因为输出是:

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


-- Configuring incomplete, errors occurred!

那么, var 存在并打印其内容,同时不存在?

4

1 回答 1

29

您需要避免取消引用语句BOOST_DIR中的变量: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()

通过取消引用BOOST_DIR,您可以有效地查询 CMake 是否有一个名为/home/ferran/boostdefined 的变量。

于 2013-03-13T17:56:22.557 回答