cmake if(DEFINED)不能正常工作

时间:2018-03-27 19:00:58

标签: cmake

我有以下代码片段:

message("TARGET_NAME=${TARGET_NAME}") 

string(TOUPPER "${TARGET_NAME}_BUILDTYPE" TARGET_BUILDTYPE)
message("TARGET_BUILDTYPE=${TARGET_BUILDTYPE}") 

if(DEFINED ${TARGET_BUILDTYPE})
    set(TG_BUILDTYPE ${${TARGET_BUILDTYPE}})
    message("TG_BUILDTYPE=\"${TG_BUILDTYPE}\"")
else()
    message( FATAL_ERROR "cm_add_variable_target() was called, but no target 
    type variable is found")
endif()

输出是:

  

TARGET_NAME =" DSE_Utilities"

     

TARGET_BUILDTYPE = DSE_UTILITIES_BUILDTYPE

     

dep / buildspec / cmake-common.cmake中的CMake错误:605(消息):
  调用了cm_add_variable_target(),但没有目标类型变量   找到了Call Stack(最近一次呼叫):
  src / DSE_Utilities / CMakeLists.txt:31(cm_add_variable_target)

为什么不进入代码?

1 个答案:

答案 0 :(得分:2)

您的语法略有偏差,此处不应使用$和花括号。它应该是:

if (DEFINED TARGET_BUILDTYPE)
    ...
else()
    ...
endif()

执行if(DEFINED ${TARGET_BUILDTYPE})会导致CMake扩展变量并查找由扩展结果命名的变量。 (在您的情况下,它最终检查是否定义了名为DSE_UTILITIES_BUILDTYPE的变量)

有关详细信息,请参阅CMake's if() command documentation