Подтвердить что ты не робот

QMake: как именно qmake интерпретирует синтаксис "CONFIG (debug, debug | release)"

Я читал, хотя ЗДЕСЬ, но я до сих пор не понимаю синтаксис переменной qmake CONFIG. например, если у меня есть следующие настройки CONFIG в моем .pro file:

CONFIG(debug, debug|release) {
    message("debug mode")
}else {
    message("release mode")
}

то при запуске qmake на выходе компиляции в Qt-Creator будет отображаться следующее:

Project MESSAGE: debug mode
Project MESSAGE: debug mode
Project MESSAGE: release mode

зная, что я строю свой проект в режиме отладки, тогда мои вопросы:

  • почему не показывать только сообщение "режим отладки" ? и почему бы не показать его только один раз?
  • Затем, поскольку я создаю "режим отладки", , почему отображается сообщение "Project MESSAGE: режим выпуска" ?
  • Точно, , что синтаксис: CONFIG (debug, debug | release) действительно означает? означает ли это, что сборка выполняется в режиме отладки, затем снова встраивается в режим отладки и, наконец, создается в выпуске Режим? Я знаю, что эти скобки "{}" означают область, но как qmake интерпретировать то, что находится внутри этих скобок "()"?
4b9b3361

Ответ 1

В статье, в которую вы ссылались, в самом начале говорилось, что файл проекта обрабатывается три раза. Это должно ответить на ваш первый вопрос; поскольку он обрабатывается три раза, ваше сообщение() выполняется три раза. Почему он обрабатывается несколько раз? Потому что qmake не строит ваш проект! Он генерирует только команды построения, которые затем используются для фактического создания проекта. Чтобы генерировать инструкции по сборке для всех возможных конфигураций, необходимо обработать файл проекта несколько раз, один раз для каждой конфигурации.

Для вашего второго вопроса: ваш проект построен только в режиме отладки, если вы выбрали то, что вы выбрали, но также создаете инструкции для режима выпуска, как уже упоминалось выше. Например, при использовании "make" с mingw (а не Visual Studio) вы получаете два Makefiles: Makefile.Release и Makefile.Debug. Когда он генерирует файл make release, это когда печатается "режим выпуска".

Наконец, CONFIG(debug, debug|release) оценивает значение true, если CONFIG содержит "debug" , но не "release" , или если он содержит как "debug" , так и "release" , но "release" не появляется после последнего появления "debug" ". Например, у вас может быть следующее:

CONFIG += release debug release debug release debug

Поскольку последний "отладочный" приходит после последней "освобождения", CONFIG(debug, debug|release) имеет значение true.

Первый аргумент CONFIG() ( "debug" в этом случае) - это значение, которое должно появиться последним. Второй аргумент ( "debug | release" ) - это набор значений, с которыми проверяется первый аргумент.

Перевод этого слова на английский язык даст следующее: оцените значение true, если "debug" появляется хотя бы один раз, и в случае появления "release" последнее появление "debug" появляется после последнего появления "release" ,.