不完全是 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 中。