CMAKE_BUILD_TYPE 宏匹配問題:
錯誤代碼:
# Linux operation system
IF (CMAKE_BUILD_TYPE MATCHES "Debug"
OR CMAKE_BUILD_TYPE MATCHES "None"
OR CMAKE_BUILD_TYPE MATCHES "")
ADD_DEFINITIONS(-D _DEBUG_CDB)
ADD_DEFINITIONS(-D DEBUG)
ELSEIF (CMAKE_BUILD_TYPE MATCHES "Release")
ELSEIF (CMAKE_BUILD_TYPE MATCHES "RelWitchDebInfo")
ELSEIF (CMAKE_BUILD_TYPE MATCHES "MinSizeRel")
ELSE ()
MESSAGE(FATAL_ERROR "unknown CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE},"
" CMAKE_BUILD_TYPE: Debug or None, Release, RelWitchDebInfo,"
" RelWitchDebInfo")
ENDIF ()
正確代碼:
# Linux operation system
IF (CMAKE_BUILD_TYPE MATCHES "Debug"
OR CMAKE_BUILD_TYPE MATCHES "None")
ADD_DEFINITIONS(-D _DEBUG_CDB)
ADD_DEFINITIONS(-D DEBUG)
ELSEIF (CMAKE_BUILD_TYPE MATCHES "Release")
ELSEIF (CMAKE_BUILD_TYPE MATCHES "RelWitchDebInfo")
ELSEIF (CMAKE_BUILD_TYPE MATCHES "MinSizeRel")
ELSE ()
MESSAGE(FATAL_ERROR "unknown CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE},"
" CMAKE_BUILD_TYPE: Debug or None, Release, RelWitchDebInfo,"
" RelWitchDebInfo")
ENDIF ()
如果你夠仔細的話應該不難發現兩者的差別僅僅是一行 CMAKE_BUILD_TYPE MATCHES "" 而以,我用的時候以爲這個是匹配未定義呢,結果不是。未定義的時候該值爲"None" 如果只給一個"" 那麼它會匹配所有