如何在不使用绝对路径的情况下在Qt Creator中指定构建目录以进行阴影构建?

Ser*_*kov 14 qt qmake qt-creator

绝对的道路是荒谬的.我们需要的所有东西 - 顺便说一下,我们所允许的 - 是使用与包含.pro文件的文件夹相同级别的文件夹进行阴影构建.否则会有错误.

但你不能只../mingw_debug举例说明.是的,这是相对的路径,但相对于什么?事实证明它与Qt Creator的当前目录相关,这完全没有意义.

%{sourceDir}也没有任何帮助.%{sourceDir}/../mingw_debug不要工作,至少在Windows上.如果有办法从sourceDir中提取父文件夹!

有人知道解决问题的方法吗?

Mar*_*tin 0

不完全是影子构建,因为 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
Run Code Online (Sandbox Code Playgroud)

因此,您可以将所有对象、moc、gui 文件放在单独的目录中(例如 libcommon/build/program-desktop-debug/moc),并将二进制文件放在相同的目录中,但名称不同。要触发一个或另一个构建,您只需在构建目标中设置 CONFIG+= 即可。最好的一点是,此结构仅取决于 pro 文件,您可以将其部分内容放在 common.pri 中并将其用于所有项目。不再需要影子构建配置。顺便说一句,pro 文件应该驻留在 libcommon/libcommon.pro 中。