qMake: jak dokładnie qmake interpretuje składnię " CONFIG (debug, debug|release)"

Przeczytałem chociaż tutaj , jednak nadal nie rozumiem składni zmiennej qmake CONFIG. na przykład, jeśli mam następujące ustawienia konfiguracyjne w moim .pro file:

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

Następnie, podczas uruchamiania qmake, w wyniku kompilacji w Qt-Creator zostaną wyświetlone następujące elementy:

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

Wiedząc, że buduję swój projekt w "trybie debugowania" , moje pytania brzmią:

  • dlaczego nie pokazano tylko komunikatu "Tryb debugowania" ? a dlaczego nie pokazywać tego po prostu raz ?
  • zatem, ponieważ buduję w "trybie debugowania", dlaczego wyświetlany jest komunikat "Project MESSAGE: release mode" ?
  • dokładnie, co naprawdę oznacza składnia: CONFIG (debug, debug|release)? czy to oznacza, że budować w trybie debugowania, następnie ponownie budować w trybie debugowania i wreszcie budować w trybie wydania ? Wiem, że te nawiasy "{} " oznaczają zakres , ale jak qmake interpretuje to, co znajduje się w tych nawiasach "()" ?
Author: ariwez, 2013-06-06

1 answers

W artykule, do którego nawiązałeś, jest napisane na samym początku, że plik projektu jest przetwarzany trzy razy. Powinno to odpowiedzieć na twoje pierwsze pytanie; ponieważ jest przetwarzane trzy razy, twoja wiadomość () jest również wykonywana trzy razy. Dlaczego jest przetwarzany wielokrotnie? Ponieważ qmake nie buduje twojego projektu! Generuje tylko instrukcje budowania, które są następnie używane do rzeczywistego budowania projektu. Aby wygenerować instrukcje budowania dla wszystkich możliwych konfiguracji, musi przetworzyć plik projektu wiele razy, jeden raz dla każdej konfiguracji.

Dla drugiego pytania: Twój projekt jest zbudowany tylko w trybie debugowania, jeśli to wybrałeś, ale instrukcje budowania są tworzone również dla trybu Wydania, jak już wspomniano powyżej. Podczas używania "make" na przykład z MinGW (zamiast Visual Studio), otrzymujemy dwa pliki Makefile: Makefile.Release i Makefile.Debug. Podczas generowania pliku Makefile release, to jest, gdy" release mode " jest drukowany.

Wreszcie, CONFIG(debug, debug|release) ocenia na true jeśli CONFIG zawiera "debug", ale nie "release", lub jeśli zawiera zarówno" debug", jak i "release", ale "release "nie pojawia się po ostatnim wystąpieniu"debug". Na przykład możesz mieć to:

CONFIG += release debug release debug release debug

Ponieważ ostatni "debug" pojawia się po ostatnim "wydaniu", CONFIG(debug, debug|release) jest prawdą.

Pierwszy argument config () (w tym przypadku" debug") jest wartością, która ma pojawić się jako ostatnia. Drugi argument ("debug|release") jest zestawem wartości, z którymi sprawdzany jest pierwszy argument.

Tłumaczenie to w języku angielskim dałoby coś takiego: evaluate to true jeśli "debug" pojawia się przynajmniej raz, a w przypadku, gdy "release" pojawia się również, ostatni wygląd "debug" pojawia się po ostatnim pojawieniu się "release".

 51
Author: Nikos C.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-30 12:10:52