2016-01-22 85 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