Независимые флаги компилятора CMake - PullRequest
1 голос
/ 18 апреля 2019

Есть ли какие-либо независимые от компилятора флаги, которые можно установить?Я хотел бы иметь возможность установить одну переменную, например, OPTIMIZE_MOST и получить -O3 на gcc и /O2 в компиляторе MS C ++.Что-то, что я могу использовать, или должны быть установлены флаги для каждого компилятора отдельно?

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Проще говоря: нет, нет флага для прямой установки уровня оптимизации независимо для каждого компилятора.

Однако, CMake предоставляет так называемые типы сборки . Они не зависят от используемого компилятора, и каждый поставляется с предопределенным набором флагов, одним из которых является флаг оптимизации.

Доступные типы сборки:

  • Debug
  • Release
  • RelWithDebInfo
  • MinSizeRel

Подробное объяснение приведено в этом ответе . Он также предоставляет некоторый код, который помогает идентифицировать рассматриваемые флаги при включении в файл CMakeLists.txt:

message("CMAKE_C_FLAGS_DEBUG is ${CMAKE_C_FLAGS_DEBUG}")
message("CMAKE_C_FLAGS_RELEASE is ${CMAKE_C_FLAGS_RELEASE}")
message("CMAKE_C_FLAGS_RELWITHDEBINFO is ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
message("CMAKE_C_FLAGS_MINSIZEREL is ${CMAKE_C_FLAGS_MINSIZEREL}")

message("CMAKE_CXX_FLAGS_DEBUG is ${CMAKE_CXX_FLAGS_DEBUG}")
message("CMAKE_CXX_FLAGS_RELEASE is ${CMAKE_CXX_FLAGS_RELEASE}")
message("CMAKE_CXX_FLAGS_RELWITHDEBINFO is ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
message("CMAKE_CXX_FLAGS_MINSIZEREL is ${CMAKE_CXX_FLAGS_MINSIZEREL}")
0 голосов
/ 18 апреля 2019

В определенной степени.Для некоторых концепций CMake поддерживает их указание без учета компилятора, обычно путем установки свойств для рассматриваемой цели.К сожалению, нет ни одного места, где бы были перечислены все такие возможности.Я просмотрел текущий список целевых свойств и определил следующие свойства как «абстрагируемый синтаксис опций инструмента сборки»:

  • COMPILE_PDB_NAME
  • INCLUDE_DIRECTORIES
  • INSTALL_RPATH
  • INTERPROCEDURAL_OPTIMIZATION
  • LINK_DIRECTORIES
  • LINK_LIBRARIES
  • PDB_NAME
  • PDB_OUTPUT_DIRECTORY
  • (плюс свойства для задания выходного имени, пути и т. Д.)

Очевидно, что нет ничего для обработки флагов оптимизации, кроме IPO.

Насколько мне известно, также нет общего процесса их добавления - они добавляются в CMake, когда кто-то находит в них необходимость (и время для их реализации).

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