有没有可以使用的解决方法,以便在将CMake与Visual Studio和多个配置结合使用时可以测试构建类型?

时间:2015-05-20 11:56:18

标签: cmake

我想使用' Debug',' Release',' Debug_Unicode'和' Release_Unicode' 我已经能够使用DEBUG_CONFIGURATIONS变量,以便调试Unicode'配置正确用作调试

这是我在 CmakeLists.txt 文件中尝试做的事情:

    target_link_libraries(tests 
                                optimized   ${CMAKE_BINARY_DIR}/src/${CMAKE_BUILD_TYPE}/foo.lib
                                debug       ${CMAKE_BINARY_DIR}/src/${CMAKE_BUILD_TYPE}/foo.lib
                         )

显然,CMake此时可以在调试和发布之间做出选择,因为它必须选择“优化的”#39;或者'调试'图书馆。 但是,CMAKE_BUILD_TYPE是一个空字符串。

我能够提出的最好的方法是为每个配置使用单独的解决方案文件, 自己传递CMAKE_BUILD_TYPE

cmake -G Visual Studio 11 2012 Win64 -DCMAKE_BUILD_TYPE=Debug_Unicode C:\foo

1 个答案:

答案 0 :(得分:0)

正如安东尼奥提到的那样

target_link_libraries(tests foo)

或只是

add_dependencies(tests foo)

足以从同一配置链接正确的库。

如果您想要更高级的内容,请查看generator expressions。它们是配置敏感的包括。在Visual Studio的多配置环境中,它们也适用于target_link_libraries()命令。

所以你的例子看起来像:

target_link_libraries(tests ${CMAKE_BINARY_DIR}/src/$<CONFIG>/foo.lib)

我使用了生成器表达式,例如在需要知道我的DLL的输出路径的自定义命令中(如果foo将生成MSTest DLL):

 add_test(
     NAME RunFooTest
     WORKING_DIRECTORY $<TARGET_FILE_DIR:foo>
     COMMAND vstest.console.exe /InIsolation /Platform:x86 $<TARGET_FILE:$foo>
 )

并且 - 仅仅因为您提到了不同的解决方案 - 您可以使用CMake从命令行构建某个配置。在您的情况下,这将是例如。

cmake --build C:\foo --target ALL_BUILD --config Debug_Unicode