2013-06-12 91 views
4

我的问题与CMake : Changing name of Visual Studio and Xcode exectuables depending on configuration in a project generated by CMake非常相似。在那篇文章中,输出文件名将根据项目配置(调试,发布等)进行更改。我想走得更远。当我知道项目的配置时,我想告诉可执行程序根据项目配置链接不同的库名称。我想知道在CMake中是否有一个变量可以告诉项目配置。如果存在这样一个变量,我的任务将变得更加容易:CMake中的项目构建配置

if (Project_Configure_Name STREQUAL "Debug") 
    #do some thing 
elseif (Project_Configure_Name STREQUAL "Release") 
    #do some thing 
endif() 

回答

8

http://cmake.org/cmake/help/v2.8.8/cmake.html#command:target_link_libraries,您可以根据用户配置指定的库,例如:

target_link_libraries(mytarget 
    debug  mydebuglibrary 
    optimized myreleaselibrary 
) 

要小心的是,optimized模式的装置每个不调试的配置

以下是一个比较复杂的,但更可控的解决方案:

假设你链接到一个导入库(在cmake的项目不编译),您可以使用添加:

add_library(foo STATIC IMPORTED) 
set_property(TARGET foo PROPERTY IMPORTED_LOCATION_RELEASE c:/path/to/foo.lib) 
set_property(TARGET foo PROPERTY IMPORTED_LOCATION_DEBUG c:/path/to/foo_d.lib) 
add_executable(myexe src1.c src2.c) 
target_link_libraries(myexe foo) 

http://www.cmake.org/Wiki/CMake/Tutorials/Exporting_and_Importing_Targets更多细节。

0

总有另一种方式:

if(CMAKE_BUILD_TYPE MATCHES "release") 

    SET(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}) 

    else(CMAKE_BUILD_TYPE MATCHES "debug") 

    SET(CMAKE_BUILD_TYPE "debug") 

    endif(CMAKE_BUILD_TYPE MATCHES "release") 

我们可以使用变量CMAKE_BUILD_TYPE。我们还可以在调用cmake的开始改变这个变量:

cmake .. -DCMAKE_BUILD_TYPE:STRING=debug 

然后我们可以使用这个变量作为构建配置的指标。

+0

这对于多配置目标(Visual Studio,xcode等)不适用, – ltjax