14

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

但是您不能只指定../mingw_debug例如。是的,它是相对路径,但相对于什么?原来它是相对于 Qt Creator 的当前目录的,这完全没有意义。

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

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

4

4 回答 4

2

至少在 Qt Creator 3.6.1 中,这是固定的——相对路径工作得很好。解析的完整路径显示在工具提示中。不知道这几年什么时候修好了。

于 2016-06-08T10:33:06.603 回答
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+=。最好的是这个结构只依赖于 pro 文件,你可以把它的一部分放在一个 common.pri 中,并将它用于你的所有项目。不再需要影子构建配置。顺便说一下,pro 文件应该驻留在 libcommon/libcommon.pro 中。

于 2012-08-10T23:20:38.093 回答
0

我在*.pro文件中使用此代码,它似乎工作正常。

CONFIG(debug, debug|release){
    DESTDIR=$$shadowed($$ROOT_PWD)/debug
}else{
    DESTDIR=$$shadowed($$ROOT_PWD)/release
}
于 2019-11-25T07:07:25.717 回答
-1

有几件事可用于使其易于管理:

$$_PRO_FILE_PWD_(version >=4.5) 变量包含当前正在读取的 pro 文件的目录。

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

PROJECT_DIR = $$PWD

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

于 2012-09-21T11:07:15.027 回答