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

Как указать каталог сборки в Qt Creator для создания тени без использования абсолютного пути?

Абсолютные пути смешны. Все, что нам нужно - и все, что нам разрешено, кстати, - это использовать папку на том же уровне, что и папка, содержащая файл .pro для теневых построений. В противном случае есть ошибки.

Но вы не можете просто указать ../mingw_debug, например. Да, это относительный путь, но относительно чего? Оказывается, это относительно текущего каталога Qt Creator, и это совершенно бессмысленно.

%{sourceDir} тоже не помогает. %{sourceDir}/../mingw_debug dosen't работает, по крайней мере, в Windows. Если бы был способ извлечь родительскую папку из sourceDir!

Кто-нибудь знает способ решения проблемы?

4b9b3361

Ответ 1

В Qt Creator 3.6.1 по крайней мере это фиксировано - относительные пути работают просто отлично. Разрешенный полный путь показан в подсказке. Я не знаю, когда в последние несколько лет это было исправлено.

Ответ 2

Не точно теневые сборки, поскольку qt-creator определяет их, но я использую следующее, чтобы получить аккуратную структуру сборки.

Выдержка из про файла для библиотеки, которую я создаю для нескольких целей, а также в тестовых режимах.

TARGET = ../lib/common
message("libcommon:")

contains(CONFIG,test){
  message("Building Test")
  DESTDIR = test
  TARGET = $$TARGET-test
}else{
  message("Building Program")
  DESTDIR = program
  TARGET = $$TARGET
}

contains(MEEGO_EDITION,harmattan){
  message("Maemo Harmattan")
  DESTDIR = $$DESTDIR-maemo6
  TARGET = $$TARGET-maemo6
  DEFINES += MAEMO MAEMO6
}
unix:!maemo5:!contains(MEEGO_EDITION,harmattan){#desktop
  message("Desktop")
  DESTDIR = $$DESTDIR-desktop
  TARGET = $$TARGET-desktop
}

contains(CONFIG,test){
  TEMPLATE = app
  SOURCES += $$files(src_test/main.cpp)
  HEADERS += $$files(src_test/*.h)
  INCLUDEPATH += src_test
}else{
  TEMPLATE = lib
  CONFIG += staticlib
}

CONFIG(debug, debug|release) {
  message("Debug")
  DESTDIR = $$DESTDIR-debug
  CONFIG += debug
  DEFINES += DEBUG
  TARGET = $$TARGET-debug
}else{
  message("Release")  
  //DEFINES += QT_NO_DEBUG_OUTPUT
  DESTDIR = $$DESTDIR-release
  TARGET = $$TARGET-release
}
MOC_DIR = build/$${DESTDIR}/moc
OBJECTS_DIR = build/$${DESTDIR}/obj
UI_DIR = build/$${DESTDIR}/ui

Таким образом, вы получаете все свои объекты, moc, gui файлы в отдельных каталогах (например, libcommon/build/program-desktop-debug/moc) и ваши двоичные файлы в одном и том же именах. Чтобы запускать одну сборку, вы просто устанавливаете CONFIG + = в цель сборки. И самое лучшее, что эта структура зависит только от файла pro, и вы можете поместить ее части в common.pri и использовать его для всех своих проектов. Нет необходимости в настройке теневой сборки. Кстати, файл pro находится в libcommon/libcommon.pro, как и должно быть.

Ответ 3

Есть несколько вещей, которые могут быть использованы для обеспечения этой возможности:

$$_PRO_FILE_PWD_ (версия >= 4.5) переменная содержит каталог текущего текущего файла pro.

Используйте файл .qmake.cache в корневом каталоге проекта и определите переменную для каталога:

PROJECT_DIR = $$PWD

Затем используйте это для навигации по началу от корня.