2013-06-12 2 views
4

Мой вопрос очень похож на CMake : Changing name of Visual Studio and Xcode exectuables depending on configuration in a project generated by CMake. В этом сообщении имя выходного файла будет изменяться в соответствии с конфигурацией проекта (Debug, Release и т. Д.). Я хочу идти дальше. Когда я знаю конфигурацию проекта, я хочу сообщить исполняемой программе связать разные имена библиотек в зависимости от конфигурации проекта. Мне было интересно, есть ли переменная в 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

Смежные вопросы