Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 多配置生成器中基于CMake配置的条件_Visual Studio 2012_Cmake - Fatal编程技术网

Visual studio 2012 多配置生成器中基于CMake配置的条件

Visual studio 2012 多配置生成器中基于CMake配置的条件,visual-studio-2012,cmake,Visual Studio 2012,Cmake,我期待着指定不同的DLL的基础上使用它的调试或发布建设。例如: IF CONFIGURATION MATCHES Debug SET(MYDLL my_dlld) ELSE() SET(MYDLL my_dll) ENDIF() 我看过逻辑表达式,例如 $<$<CONFIG:Debug>:DEBUG_MODE> $ 但这似乎不起作用,可能是我对它的执行不正确。任何帮助都将不胜感激 编辑:一些用于理解的最小代码 PROJECT(myproject

我期待着指定不同的DLL的基础上使用它的调试或发布建设。例如:

 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}
   )
项目(myproject)
#添加_定义(-DMANAGER_导出)
包含目录(
${CMAKE_SOURCE_DIR}/API/mydll
)
$
$
设置(LIBS)
${MYDLL}
)

mydll-是一个预生成的共享库,具有调试和发布版本

我认为一个可能的解决方案是您可以执行以下操作

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

希望这有帮助

生成器表达式确实是一种方法,但它们仅在特定上下文中进行计算,并且仅在生成时进行计算。因此,您是否可以使用它们取决于您使用的
MYDLL
。你能发布你的CMake代码吗?编辑以尝试满足最小的示例你刚刚将问题向后推了一步。你到底在用
LIBS
做什么?这才是最重要的-在CMake代码中,
MYDLL
最终用于什么。Genexes在某些上下文中进行计算,如在
目标链接库
中等,但不在一般的CMake代码中进行计算。@Mikitarant:生成器表达式在这种情况下也可以用作变量
链接库
$
的值。