CMake: разные операции с разным типом сборки

#cmake

#cmake

Вопрос:

Я хочу добавить некоторые конкретные флаги при компиляции в режиме отладки (GCC / Linux). Когда я вызываю cmake, я хочу напечатать все эти флаги. Если я компилирую в режиме выпуска, я не устанавливаю их, поэтому я не хочу печатать флаги.

По сути, я хочу распечатать сообщение только в том случае, если я выполняю сборку в режиме отладки.

В моем CMakefile.txt У меня есть следующий код:

 # Setting compiler
if (CMAKE_COMPILER_IS_GNUCXX)
  set (USER_DEBUG_FLAGS "-W -Wall -Wextra -Winit-self -Werror")
  message(STATUS "Setting extra flags for Linux compiler")
  if (CMAKE_BUILD_TYPE MATCHES Debug)
    list(APPEND CMAKE_CXX_FLAGS_DEBUG ${USER_DEBUG_FLAGS})
    message(STATUS "Debug compiler flags: ${CMAKE_CXX_FLAGS_DEBUG")
  endif(CMAKE_BUILD_TYPE MATCHES Debug)
endif(CMAKE_COMPILER_IS_GNUCXX)
 

Если я вызову cmake с помощью

 cmake /path/to/CMakefile.txt/ -DCMAKE_BUILD_TYPE=Debug
 

Я вижу первое сообщение (значит, компилятор Linux распознан), но я не вижу второго сообщения.

Как я могу проверить, установлено ли CMAKE_BUILD_TYPE значение Debug или Release?

Комментарии:

1. } В строке 7 чего-то не хватает.

2. С другой стороны, вам не нужно проверять CMAKE_BUILD_TYPE , как CMAKE_CXX_FLAGS_DEBUG используется только в конфигурации отладки. На самом деле, в системах сборки с несколькими конфигурациями, таких как Visual Studio, это явно неправильно.

3. @Lindydancer спасибо, но проблема остается. Я знаю, что мне не следует использовать его с системами с несколькими конфигурациями. Я делаю это только для gcc.

4. Попробуйте выполнить печать ${CMAKE_BUILD_TYPE} . (Кроме того, вы можете использовать if(... STREQUAL ...) вместо MATCHES , оба варианта работают, но более поздние работают с регулярными выражениями:s, что немного излишне.)

5. СТРЕКВАЛ сработал. Большое спасибо.