我有以下代码片段:
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)
为什么不进入代码?
答案 0 :(得分:2)
您的语法略有偏差,此处不应使用$和花括号。它应该是:
if (DEFINED TARGET_BUILDTYPE)
...
else()
...
endif()
执行if(DEFINED ${TARGET_BUILDTYPE})
会导致CMake扩展变量并查找由扩展结果命名的变量。 (在您的情况下,它最终检查是否定义了名为DSE_UTILITIES_BUILDTYPE的变量)
有关详细信息,请参阅CMake's if() command documentation。