CMake дополнительные параметры отладки
При компиляции кода с отладочными символами я обычно также хочу включить определенные проверки во время компиляции и во время выполнения, например, так:
gfortran -c -o hello.o -g -O0 -Wall -fcheck-all -fbacktrace hello.f90
(Да, это Фортран, но я предполагаю, что он будет работать с другими языками точно так же.)
Если бы я хотел скомпилировать то же самое с Intel Fortran Compiler, команда выглядела бы так:
ifort -c -o hello.o -g -O0 -warn all -check all -traceback hello.f90
Единственный способ компилировать в CMake, который я нашел до сих пор, это что-то вроде этого:
IF(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU")
set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -Wall -fcheck=all -fbacktrace")
ELSEIF(${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel")
set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -warn all -check all -traceback")
ELSE()
message(WARNING "Unable to determine Compiler ID: ${CMAKE_Fortran_COMPILER_ID}")
ENDIF(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU")
Но это вводит все жестко заданные флаги, которых я хотел избежать, когда начинаю использовать CMake. Есть ли способ добавить переключатели компилятора в зависимости от того, что они делают, например "Включить все предупреждения времени компиляции" или "Включить все проверки времени выполнения"?
2 ответа
API предупреждения CMake: скоро будет.
В обсуждении предлагаются такие команды, как add_compile_warnings
или же target_compile_warnings
, следуя модели add_compile_options
а также target_compile_definitions
с уровнями предупреждения, такими как:
- all (специфично для компилятора "all", например /Wall или -Wall);
- дефолт;
- никто;
- все (все возможные предупреждения для компилятора, если такой опции нет, используйте максимальный уровень плюс некоторые предупреждения явно).
Вы можете изучить предложенный API и, возможно, изложить свои неудовлетворенные потребности в обсуждении.
Нет, CMakes (в текущей версии 3.6) не предлагает такие наборы переключателей компилятора. Вы должны определить их самостоятельно.
На самом деле, все компиляторы предлагают такой переключатель, как Wall
, Вы не удовлетворены выбором программистов компилятора, как программисты CMake могут добиться большего успеха?