Saya memiliki proyek Qt dan saya ingin mengeluarkan file kompilasi di luar pohon sumber.
Saat ini saya memiliki struktur direktori berikut:
/
|_/build
|_/mylib
|_/include
|_/src
|_/resources
Bergantung pada konfigurasinya (debug / rilis), saya ingin mengeluarkan file yang dihasilkan di dalam direktori build di bawah direktori build / debug atau build / release.
Bagaimana saya bisa melakukannya menggunakan file .pro?
Jawaban:
Jawaban singkatnya adalah: Anda tidak .
Anda harus menjalankannya
qmake
dengan diikutimake
di direktori build apa pun yang ingin Anda buat. Jadi, jalankan sekali dalamdebug
direktori, sekali dalamrelease
direktori.Begitulah cara setiap orang yang membangun proyek Anda mengharapkannya untuk bekerja, dan begitulah Qt itu sendiri diatur untuk dibangun, itu juga bagaimana Qt Creator mengharapkan
.pro
file Anda berperilaku: itu hanya dimulaiqmake
dan kemudianmake
di folder build untuk konfigurasi yang dipilih target Anda.Jika Anda ingin membuat folder ini dan menjalankan dua (atau lebih) build di dalamnya, Anda memerlukan makefile tingkat atas, yang mungkin dibuat dari file proyek tingkat atas melalui qmake.
Tidak jarang memiliki lebih dari dua konfigurasi build, jadi Anda tidak perlu berkomitmen untuk hanya membedakan antara build dan rilis; Anda mungkin memiliki build dengan tingkat pengoptimalan yang berbeda, dll . Dikotomi debug / rilis sebaiknya dibiarkan tenang.
sumber
Untuk proyek Qt saya, saya menggunakan skema ini di file * .pro:
Sederhana, tapi bagus! :)
sumber
DESTDIR
s kondisional, dan kemudian menggunakan nilai bahwa dalam semua jalur lain:OBJECTS_DIR = $${DESTDIR}/.obj
. Bersulang!Debug
kedebug
danRelease
kerelease
.Untuk mengubah direktori target dll / exe, gunakan ini di file pro Anda:
Anda mungkin juga ingin mengubah direktori untuk target build lain seperti file objek dan file moc (periksa referensi variabel qmake untuk mengetahui detailnya atau referensi fungsi qmake CONFIG () ).
sumber
OBJECTS_DIR = $$DESTDIR/.obj MOC_DIR = $$DESTDIR/.moc RCC_DIR = $$DESTDIR/.qrc UI_DIR = $$DESTDIR/.ui
CONFIG()
ternyata untuk menyelesaikan beberapa masalah penggunaanrelease:
dandebug:
Saya memiliki pendekatan yang lebih ringkas:
sumber
Cara yang benar untuk melakukan ini adalah sebagai berikut (terima kasih Tim Dukungan QT):
Info lebih lanjut di sini: 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_the_2nd_.3
sumber
Saya menggunakan metode yang sama yang disarankan oleh chalup,
sumber
Pertanyaan lama, tapi tetap bernilai jawaban terkini. Saat ini adalah hal umum untuk melakukan apa yang dilakukan Qt Creator ketika shadow build digunakan (mereka diaktifkan secara default saat membuka proyek baru).
Untuk setiap target dan jenis build yang berbeda, hak
qmake
tersebut dijalankan dengan argumen yang benar dalam direktori build yang berbeda. Maka itu baru dibangun dengan sederhanamake
.Jadi, struktur direktori imajiner mungkin terlihat seperti ini.
Dan yang terpenting adalah, a
qmake
dijalankan di direktori build:Kemudian itu menghasilkan makefiles di direktori build, dan kemudian
make
akan menghasilkan file di bawahnya juga. Tidak ada risiko tercampurnya versi yang berbeda, selama qmake tidak pernah berjalan di direktori sumber (jika ya, lebih baik bersihkan dengan baik!).Dan ketika dilakukan seperti ini,
.pro
file dari jawaban yang diterima saat ini bahkan lebih sederhana:sumber
$(OUT_PWD)
adalah solusi?mylib
? Saya ingin jika ada cara yang "anggun" untuk melakukan ini, saya tidak melihat cara lain selain menggunakan teknik dari jawaban lain: gunakan tipe build dan konfigurasi untuk mengisiLIBS
dengan cara yang cerdas, meniadakan keuntungan dari shadow build.include(../mylib/mylib.pri)
Ini juga berguna untuk memiliki nama yang sedikit berbeda untuk keluaran yang dapat dieksekusi. Anda tidak dapat menggunakan sesuatu seperti:
Mengapa itu tidak berhasil tidak jelas, tetapi tidak. Tapi:
Ini bekerja selama
CONFIG +=
garis sebelumnya.sumber
Versi baru Qt Creator juga memiliki opsi build "profil" antara debug dan rilis. Inilah cara saya mendeteksinya:
sumber
1. Temukan Debug / Rilis di CONFIG
Dapatkan arus (debug | rilis).
(Mungkin banyak, jadi pertahankan hanya yang terakhir ditentukan dalam build):
2. Atur DESTDIR
Gunakan itu memiliki nama subdir build
sumber
Ini adalah Makefile saya untuk direktori keluaran debug / rilis yang berbeda. Makefile ini telah berhasil diuji di Ubuntu linux. Ini harus bekerja dengan lancar di Windows asalkan Mingw-w64 diinstal dengan benar.
sumber