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

时间:2012-08-10 17:46:48

标签: qt qt-creator qmake

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

但您不能仅指定../mingw_debug。是的,这是相对的路径,但相对于什么?事实证明它与Qt Creator的当前目录相关,这完全没有意义。

%{sourceDir}也无济于事。至少在Windows上,%{sourceDir}/../mingw_debug不起作用。如果有办法从sourceDir中提取父文件夹!

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

4 个答案:

答案 0 :(得分:2)

至少在Qt Creator 3.6.1中,这是固定的 - 相对路径工作正常。解决的完整路径显示在工具提示中。我不知道在过去的几年里这是什么时候已经解决了。

答案 1 :(得分: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

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

答案 2 :(得分:0)

有几件事可以用来使这个易于管理:

$$_PRO_FILE_PWD_(版本> = 4.5)变量包含正在读取的当前专业文件的目录。

使用项目根目录中的.qmake.cache文件,并为目录定义变量:

PROJECT_DIR = $$PWD

然后使用它从根目录开始导航。

答案 3 :(得分:0)

我正在*.pro文件中使用此代码,看来工作正常。

CONFIG(debug, debug|release){
    DESTDIR=$$shadowed($$ROOT_PWD)/debug
}else{
    DESTDIR=$$shadowed($$ROOT_PWD)/release
}