2013-07-18 3 views
1

Добрый день, мой вопрос о Cmake. Возможно ли создать зависимости для проекта MSVC с разными типами построения. Теперь у меня есть следующий код в CMake файле:ADD_DEPENDENCIES для разных типов сборки

SET(LIBRARIES optimized lib_release debug lib_debug) 
ADD_CUSTOM_TARGET(lib_release 
COMMAND ${CMAKE_COMMAND} -E copy_if_different "bla bla bla" 
COMMENT "Build dep release library") 
ADD_CUSTOM_TARGET(lib_debug 
COMMAND ${CMAKE_COMMAND} -E copy_if_different "bla bla bla" 
COMMENT "Build debug library") 
ADD_DEPENDENCIES(${PROJECT_NAME} lib_release) 
ADD_DEPENDENCIES(${PROJECT_NAME} lib_debug) 

Это работало отлично, но если я хочу создать только версию релиза я получит избыточный шаг сборку отладки версии библиотеки, которая не требуется для выпуска, эта библиотека не связана с моим target (release), но время для его создания я трачу очень много. Мой вопрос заключается в следующем: можно ли указать, какие зависимостей я использовать для выпуска и который для отладки что-то вроде этого:

ADD_DEPENDENCIES(${PROJECT_NAME} lib_release optimize) 
ADD_DEPENDENCIES(${PROJECT_NAME} lib_debug debug). 

ответ

0

CMake распознает тип сборки вы устанавливаете командой -DCMAKE_BUILD_TYPE=Debug|Release etc. Затем вы можете использовать set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} ") для компиляции флагов времени и так далее, как так:

set(CMAKE_CXX_FLAGS_DEBUG "/Zi /Od /D \"_DEBUG\" /D \"DEBUG\" /RTC1 /MDd") 
    set(CMAKE_CXX_FLAGS_MINSIZEREL "/MD") 
    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} /Zi") 

Вы также можете установить компоновщик флаги с set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} <flags>)

Индивидуальными целями может быть решен, а также аналогичным образом

set_target_properties(yourexe PROPERTIES 
         LINK_FLAGS_RELEASE "<FLAGS>" 
         LINK_FLAGS_DEBUG "/DEBUG" 
         LINK_FLAGS_RELWITHDEBINFO "<FLAGS>" 
         LINK_FLAGS_MINSIZEREL "<FLAGS>") 

Этот file поможет вам увидеть некоторые опции для разных ОС.

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