我正在尋找指定不同的DLL的基礎上使用它建立在調試或發佈。例如:多配置生成器中基於CMake配置的條件
IF CONFIGURATION MATCHES Debug
SET(MYDLL my_dlld)
ELSE()
SET(MYDLL my_dll)
ENDIF()
我已經看過邏輯表達式,如
$<$<CONFIG:Debug>:DEBUG_MODE>
但這似乎並沒有工作,也許我實現它是不正確的。任何幫助將不勝感激
編輯:爲了解一些最少的代碼
PROJECT(myproject)
#ADD_DEFINITIONS(-DMANAGER_EXPORTS)
INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/API/mydll
)
$<$<CONFIG:Debug>:SET(MYDLL mydlld)>
$<$<CONFIG:Release>:SET(MYDLL mydll)>
SET(LIBS
${MYDLL}
)
MYDLL - 是具有調試和發佈版本
生成器表達式確實是要走的路,但它們只在特定的上下文中進行評估,並且僅在生成時進行評估。所以,你是否可以使用它取決於你用'MYDLL'做什麼。你能發佈你的CMake代碼的[mcve]嗎? – Angew
編輯以嘗試並符合最小示例 –
您剛將問題推回1步。你到底在做什麼「LIBS」? ** **是重要的 - 什麼是您的CMake代碼中事實上使用的'MYDLL'。 Genexes在像target_link_libraries等內部特定的上下文中進行評估,但不是在一般的CMake代碼中。 – Angew