Смешайте флаги сборки для нескольких конфигураций в CMake - PullRequest
0 голосов
/ 22 января 2020

Согласно документации CMake здесь , мы можем использовать тип сборки для указания наших собственных типов сборки, добавляя флаги в нашу пользовательскую сборку в зависимости от опции CMAKE_BUILD_TYPE.

Например, , if CMAKE_BUILD_TYPE == Profile, CMake будет использовать CMAKE_CXX_FLAGS_PROFILE для флагов сборки.

Я хотел бы знать, есть ли способ «наследовать» флаги сборки от другого типа сборки. Например, я хочу сборку трассировки и отладки и сборку трассировки и выпуска. Можно ли сделать что-то вроде CMAKE_BUILD_TYPE=Trace_Debug, которое добавляет CMAKE_CXX_FLAGS_DEBUG и CMAKE_CXX_FLAGS_TRACE в сборку? Я предполагаю, что это может иметь некоторые проблемы, поскольку это позволило бы проекту иметь противоречивые флаги сборки, но ничто не запрещает добавлять -O1 и -O3 к нашим флагам сейчас, так что проблема уже существует.

1 Ответ

2 голосов
/ 22 января 2020

В CMake нет такой вещи, как "наследование" типа сборки.

Возможно ли сделать что-то вроде CMAKE_BUILD_TYPE=Trace_Debug, которое добавляет CMAKE_CXX_FLAGS_DEBUG и CMAKE_CXX_FLAGS_TRACE к сборке?

Просто определите (новую) переменную CMAKE_CXX_FLAGS_TRACE_DEBUG и установите ее значение соответствующим образом. При установке значения переменной вы можете использовать значения из других переменных:

# Combine values of two variables into the single one.
set(CMAKE_CXX_FLAGS_TRACE_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CMAKE_CXX_FLAGS_TRACE}")

Вы можете удалить конфликтующие флаги из полученной переменной. CMake не знает о конфликтующих флагах, он просто передает их в инструмент компилятора.

...