Флаги компиляции типов сборки Cmake (RELEASE, DEBUG и т. Д.) - PullRequest
0 голосов
/ 21 марта 2019

Я хотел бы получить некоторую ясность относительно типов сборки cmake.

В частности, мне не ясно, будет ли установка типа сборки также изменять флаги сборки, или это просто «метка», которая используется внутри для конфигурации сборки.Например, в случае сборки выпуска:

set(CMAKE_BUILD_TYPE Release)

будет ли компилятор автоматически указывать флаг O3?или мне нужно явно указать это?

Один ответ, который я нашел, устанавливает и тип сборки, и явно устанавливает флаги компилятора:

Оптимизация в CMake по умолчанию

Но другой поток, который я нашелонлайн предполагает наличие значений по умолчанию:

https://cmake.org/pipermail/cmake/2016-May/063379.html

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

РЕДАКТИРОВАТЬ:

Для дальнейшего использования, если вы хотите найти конкретные флаги для вашего компилятора (например, gnu в случае gcc или g ++), то вы можете клонировать репо, который Kamilссылки, перейдите в папку modules / compilers и попробуйте команду вроде:

grep -r _INIT . | grep -i gnu

На самом деле, как указывает Камил, эти флаги также будут такими же, как те, которые используются Clang, так как файл Clang Clangвключает в себя GNU один.

1 Ответ

1 голос
/ 21 марта 2019

Флаг зависит от компилятора. Флаг -O3 является чем-то понятным для gcc, но может не пониматься другими компиляторами. Вы можете проверить файлы внутри Modules/Compilers/* вашей установки cmake, чтобы увидеть, какие флаги добавляются в зависимости от конфигурации.

Например, в GNU.cmake мы можем прочитать:

  string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g")
  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Os -DNDEBUG")
  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")
  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")

Не думаю, что вы найдете "документацию" для этого.

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