#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. СТРЕКВАЛ сработал. Большое спасибо.