Mam projekt Qt i chciałbym wyprowadzić pliki kompilacji poza drzewo źródłowe.
Obecnie mam następującą strukturę katalogów:
/
|_/build
|_/mylib
|_/include
|_/src
|_/resources
W zależności od konfiguracji (debug / release), chciałbym wyprowadzić pliki wynikowe w katalogu build w katalogach build / debug lub build / release.
Jak mogę to zrobić używając pliku .pro?
Odpowiedzi:
Krótka odpowiedź brzmi: nie .
Powinieneś uruchomić,
qmake
a następniemake
w dowolnym katalogu kompilacji, w którym chcesz wbudować. Więc uruchom go raz wdebug
katalogu, raz wrelease
katalogu.W ten sposób każdy, kto buduje twój projekt, spodziewałby się, że zadziała, i tak samo Qt jest skonfigurowane do budowania, tak samo Qt Creator oczekuje, że twój
.pro
plik będzie się zachowywał: po prostu uruchamia się,qmake
a następniemake
w folderze kompilacji dla wybranej konfiguracji celu.Jeśli chcesz utworzyć te foldery i wykonać w nich dwie (lub więcej) kompilacje, będziesz potrzebować pliku makefile najwyższego poziomu, prawdopodobnie utworzonego z pliku projektu najwyższego poziomu za pomocą qmake.
Nierzadko zdarza się, że istnieje więcej niż dwie konfiguracje kompilacji, więc niepotrzebnie zobowiązujesz się do rozróżnienia tylko między kompilacją a wydaniem; możesz mieć kompilacje z różnymi poziomami optymalizacji itp . Dychotomię debug / release najlepiej pozostawić w spokoju.
źródło
W moim projekcie Qt używam tego schematu w pliku * .pro:
To proste, ale przyjemne! :)
źródło
DESTDIR
s warunkowo, a następnie użyć tej wartości we wszystkich innych ścieżek:OBJECTS_DIR = $${DESTDIR}/.obj
. Twoje zdrowie!Debug
nadebug
iRelease
narelease
.Aby zmienić katalog docelowy dll / exe, użyj tego w swoim pliku pro:
Możesz również chcieć zmienić katalogi dla innych celów kompilacji, takich jak pliki obiektowe i pliki moc (sprawdź opis zmiennej qmake, aby uzyskać szczegółowe informacje, lub odwołanie do funkcji qmake CONFIG () ).
źródło
OBJECTS_DIR = $$DESTDIR/.obj MOC_DIR = $$DESTDIR/.moc RCC_DIR = $$DESTDIR/.qrc UI_DIR = $$DESTDIR/.ui
CONFIG()
Okazuje się, że rozwiązuje niektóre problemy z używaniemrelease:
idebug:
Mam bardziej zwarte podejście:
źródło
Prawidłowy sposób na zrobienie tego jest następujący (dzięki zespołowi wsparcia QT):
Więcej informacji tutaj: https://wiki.qt.io/Qt_project_org_faq#What_does_the_syntax_CONFIG.28debug.2Cdebug.7Crelease.29_mean_.3F_What_does_the_1st_argument_specify_and_similarly_what_is.3_the_2
źródło
Używam tej samej metody, którą sugeruje Chalup,
źródło
Stare pytanie, ale nadal warte aktualnej odpowiedzi. Obecnie często robi się to, co robi Qt Creator, gdy używane są kompilacje w tle (są one domyślnie włączone podczas otwierania nowego projektu).
Dla każdego celu i typu kompilacji prawo
qmake
jest uruchamiane z właściwymi argumentami w innym katalogu kompilacji. To jest po prostu zbudowane za pomocą prostegomake
.Tak więc wyobrażona struktura katalogów może wyglądać tak.
Ważną rzeczą jest to, że a
qmake
jest uruchamiany w katalogu kompilacji:Następnie generuje makefile w katalogu kompilacji, a następnie
make
generuje również pliki w nim. Nie ma ryzyka pomieszania różnych wersji, o ile qmake nigdy nie zostanie uruchomiony w katalogu źródłowym (jeśli tak, to lepiej go wyczyść!).A kiedy to zrobimy,
.pro
plik z aktualnie zaakceptowanej odpowiedzi jest jeszcze prostszy:źródło
$(OUT_PWD)
jest rozwiązaniem?mylib
? Chciałbym, żeby istniał „wdzięczny” sposób na zrobienie tego, nie widzę innego sposobu niż użycie technik z innych odpowiedzi: użyj typu kompilacji i konfiguracji, aby wypełnićLIBS
w inteligentny sposób, niwelując Zaleta budowy cienia.include(../mylib/mylib.pri)
Warto też mieć nieco inną nazwę wyjściowego pliku wykonywalnego. Nie możesz użyć czegoś takiego:
Dlaczego to nie działa, nie jest jasne, ale tak nie jest. Ale:
Działa to tak długo, jak
CONFIG +=
poprzedza go wiersz.źródło
Nowa wersja Qt Creator posiada również opcję budowania "profilu" pomiędzy debugowaniem a wydaniem. Oto, jak to wykrywam:
źródło
1. Znajdź Debug / Release w CONFIG
Pobierz aktualny (debug | wydanie).
(Może być wiele, więc zachowaj tylko ostatnie określone w kompilacji):
2. Ustaw DESTDIR
Użyj go ma nazwę podkatalogu kompilacji
źródło
To jest mój plik Makefile dla różnych katalogów wyjściowych debug / release. Ten plik Makefile został pomyślnie przetestowany w systemie Ubuntu Linux. Powinien działać bezproblemowo w systemie Windows pod warunkiem, że Mingw-w64 jest poprawnie zainstalowany.
źródło