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 могут добиться большего успеха?

Другие вопросы по тегам