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!

それで、変数は存在し、その内容を出力し、同時に存在しませんか?

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

を逆参照することで、CMake にdefinedBOOST_DIRという変数があるかどうかを効果的に照会しています。/home/ferran/boost

于 2013-03-13T17:56:22.557 に答える