2016-09-13 2 views
2

При компиляции кода с отладочной, я обычно также необходимо включить определенное время компиляции и во время выполнения проверки, например:CMake дополнительные параметры отладки

gfortran -c -o hello.o -g -O0 -Wall -fcheck-all -fbacktrace hello.f90 

(Да, это Fortran, но я полагаю, что . было бы работать с другими языками только же)

Если бы я хотел, чтобы собрать то же самое с 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. Есть ли способ добавить коммутаторы компилятора на основе того, что они делают, например «Включить все предупреждения времени компиляции» или «Включить все проверки времени выполнения»?

ответ

4

CMake warning API: coming soon.

Обсуждение предлагает такие команды, как add_compile_warnings или target_compile_warnings, следующие модели add_compile_options и target_compile_definitions, с уровнями предупреждения, такие как:

  • всех (компилятор конкретной «все», например,/стене или -Wall);
  • по умолчанию;
  • нет;
  • все (все возможные предупреждения для компилятора, если такой вариант не используется, максимальный уровень плюс некоторые предупреждения явно).

Вы можете изучить предлагаемый API и, возможно, разоблачить свои неудовлетворенные потребности в обсуждении.

+1

Скоро будет немного оптимистично. ruslo объявила в списке рассылки, что хочет реализовать эту функцию в мае 2016 года. Она еще не появилась в CMake-хозяине. – usr1234567

1

Нет, CMakes (в текущей версии 3.6) не предлагает такие наборы коммутаторов компилятора. Вы должны определить их самостоятельно.
На самом деле все компиляторы предлагают такой переключатель, как Wall. Вас не устраивает выбор программистов-компиляторов, как могли бы программисты CMake сделать лучше?

+0

Я знаю, что все предлагают переключатель **, как ** '-Wall' - я просто надеялся, что будет более простой способ вызвать его. Только между «GNU» и «Intel» и «Unix» и «Win32» существует 4 разных версии «-Wall». – chw21

Смежные вопросы