Включить исходные файлы для каждой конфигурации в CMake - PullRequest
1 голос
/ 06 октября 2011

В моем конкретном проекте CMake у меня есть три файла CPP:

a.cpp
b.cpp
c.cpp

Я хочу, чтобы «a.cpp» компилировался во всех конфигурациях (выпуск и отладка).
Я только хочу »b.cpp 'должен быть скомпилирован в конфигурации DEBUG.
Я только хочу, чтобы c.cpp' был скомпилирован в конфигурации RELEASE.

Как я могу это сделать?Мне нужно что-то похожее на ключевые слова debug и optimized, которые принимаются операцией target_link_libraries() CMake.

1 Ответ

1 голос
/ 06 октября 2011

Насколько я знаю, cmake не позволяет исключать некоторые файлы в зависимости от конфигурации.Таким образом, вам нужно обойти это поведение.

Например, вы можете обернуть все содержимое b.cpp и c.cpp некоторым защитным макросом:

#ifdef BUILD_ME
//original content of your file
#endif

и следующим наборомспецифичные для конфигурации определения компилятора в cmake:

if (${CMAKE_GENERATOR} MATCHES "Make" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
    # This block might be needed because CMAKE_BUILD_TYPE is usually
    # undefined for makefiles.
    # And COMPILE_DEFINITIONS_RELEASE are not chosen by default.
    set(CMAKE_BUILD_TYPE RELEASE)
endif()

set_source_files_properties(b.cpp PROPERTIES COMPILE_DEFINITIONS_DEBUG BUILD_ME )
set_source_files_properties(c.cpp PROPERTIES COMPILE_DEFINITIONS_RELEASE BUILD_ME )
add_executable(target_name a.cpp b.cpp c.cpp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...