2016-01-22 90 views
1

我正在尋找指定不同的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 - 是具有調試和發佈版本

+2

生成器表達式確實是要走的路,但它們只在特定的上下文中進行評估,並且僅在生成時進行評估。所以,你是否可以使用它取決於你用'MYDLL'做什麼。你能發佈你的CMake代碼的[mcve]嗎? – Angew

+0

編輯以嘗試並符合最小示例 –

+1

您剛將問題推回1步。你到底在做什麼「LIBS」? ** **是重要的 - 什麼是您的CMake代碼中事實上使用的'MYDLL'。 Genexes在像target_link_libraries等內部特定的上下文中進行評估,但不是在一般的CMake代碼中。 – Angew

回答

1

預先生成的共享庫,我認爲一個可能的解決方案是你可以做以下的事情

#SET(LINK_LIB debug my_dlld optimized my_dll) 
#TARGET_LINK_LIBRARIES(MYDLL ${LINK_LIB}) 

希望這有助於!

+0

這個伎倆。謝謝 –

+1

@MikeTarrant:在這種情況下,生成器表達式也可以用作變量'LINK_LIB'的值:'$ <$ :my_dlld> $ <$ :my_dll>'。 – Tsyvarev