У меня есть проект Qt, и я хотел бы выводить файлы компиляции за пределы дерева исходных текстов.
В настоящее время у меня следующая структура каталогов:
/
|_/build
|_/mylib
|_/include
|_/src
|_/resources
В зависимости от конфигурации (отладка / выпуск) я хотел бы вывести полученные файлы в каталог сборки в каталогах сборки / отладки или сборки / выпуска.
Как я могу это сделать с помощью файла .pro?
Ответы:
Короткий ответ: нет .
Вы должны запустить с
qmake
последующимmake
в любом каталоге сборки, который хотите встроить. Итак, запустите его один раз вdebug
каталоге, один раз вrelease
каталоге.Вот как любой, кто создает ваш проект, ожидает, что он будет работать, и именно так Qt настроен для сборки, а также Qt Creator ожидает, что ваш
.pro
файл будет вести себя: он просто запускается,qmake
а затем находитсяmake
в папке сборки для выбранной вами конфигурации.Если вы хотите создать эти папки и выполнить в них две (или более) сборки, вам понадобится make-файл верхнего уровня, возможно, созданный из файла проекта верхнего уровня с помощью qmake.
Нередко наличие более двух конфигураций сборки, поэтому вы излишне обязуетесь проводить различие только между сборкой и выпуском; у вас могут быть сборки с разными уровнями оптимизации и т.д. Дихотомию отладка / выпуск лучше оставить в покое.
источник
Для своего проекта Qt я использую эту схему в файле * .pro:
Это просто, но приятно! :)
источник
DESTDIR
S условно, а затем использовать это значение во всех ваших других путях:OBJECTS_DIR = $${DESTDIR}/.obj
. Ура!Debug
чтобыdebug
иRelease
вrelease
.Чтобы изменить каталог для целевой dll / exe, используйте это в своем файле pro:
Вы также можете изменить каталоги для других целей сборки, таких как объектные файлы и файлы moc ( подробности см. В справке по переменной qmake или в справочнике по функции qmake CONFIG () ).
источник
OBJECTS_DIR = $$DESTDIR/.obj MOC_DIR = $$DESTDIR/.moc RCC_DIR = $$DESTDIR/.qrc UI_DIR = $$DESTDIR/.ui
CONFIG()
оказывается, чтобы решить некоторые проблемы с использованиемrelease:
иdebug:
У меня более компактный подход:
источник
Правильный способ сделать это (спасибо команде поддержки QT):
Подробнее здесь: 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
источник
Я использую тот же метод, который предложил chalup,
источник
Старый вопрос, но все же стоит дать актуальный ответ. Сегодня обычным делом является то, что делает Qt Creator, когда используются теневые сборки (они включены по умолчанию при открытии нового проекта).
Для каждой отдельной цели и типа сборки право
qmake
запускается с правильными аргументами в другом каталоге сборки. Тогда это просто построено с помощью simplemake
.Итак, воображаемая структура каталогов может выглядеть так.
И что важно,
qmake
в каталоге сборки запускается a :Затем он генерирует make-
make
файлы в каталоге сборки, а затем также генерирует файлы в нем. Нет риска перепутать разные версии, если qmake никогда не запускается в исходном каталоге (если это так, лучше его хорошо очистить!).И когда это делается таким образом,
.pro
файл из принятого в настоящее время ответа становится еще проще:источник
$(OUT_PWD)
- это решение?mylib
? Я бы хотел, чтобы был «изящный» способ сделать это, я не вижу другого способа, кроме использования методов из других ответов: используйте тип сборки и конфигурацию дляLIBS
разумного заполнения , сводя на нет Преимущество теневой сборки.include(../mylib/mylib.pri)
Также полезно иметь немного другое имя для выходного исполняемого файла. Вы не можете использовать что-то вроде:
Почему не работает - непонятно, но это не так. Но:
Это работает, если перед ним
CONFIG +=
стоит строка.источник
В новой версии Qt Creator также есть опция сборки «профиля» между отладкой и выпуском. Вот как я это обнаруживаю:
источник
1. Найдите Debug / Release в CONFIG
Получить текущий (отладка | выпуск).
(Может быть несколько, поэтому оставьте только последний указанный в сборке):
2. Установите DESTDIR.
Используйте его с именем подкаталога сборки
источник
Это мой Makefile для разных выходных каталогов отладки / выпуска. Этот Makefile был успешно протестирован на Ubuntu linux. Он должен без проблем работать в Windows при условии, что Mingw-w64 установлен правильно.
источник