在 Qt 的 .pro 文件中,可以通过设置多个变量来控制生成目录。以下是常用的方法:
1. 设置可执行文件输出目录
pro
pro
# 设置可执行文件输出目录
DESTDIR = $$PWD/bin
# 或者使用相对路径
DESTDIR = ./build/bin
2. 设置中间文件目录(对象文件、moc文件等)
pro
pro
# 对象文件目录
OBJECTS_DIR = $$PWD/build/obj
# moc生成的文件目录
MOC_DIR = $$PWD/build/moc
# 资源文件生成的cpp文件目录
RCC_DIR = $$PWD/build/rcc
# ui文件生成的h文件目录
UI_DIR = $$PWD/build/ui
3. 区分 Debug 和 Release 版本
pro
pro
# 区分Debug和Release版本
CONFIG(debug, debug|release) {
# Debug版本
DESTDIR = $$PWD/bin/debug
OBJECTS_DIR = $$PWD/build/debug/obj
} else {
# Release版本
DESTDIR = $$PWD/bin/release
OBJECTS_DIR = $$PWD/build/release/obj
}
- 完整的配置示例
pro
pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17
# 源文件和头文件
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
# 输出目录配置
# 可执行文件输出目录
DESTDIR = $$PWD/bin
# 中间文件目录
OBJECTS_DIR = $$PWD/build/obj
MOC_DIR = $$PWD/build/moc
RCC_DIR = $$PWD/build/rcc
UI_DIR = $$PWD/build/ui
# 区分平台
win32 {
# Windows平台
CONFIG(debug, debug|release) {
DESTDIR = $$PWD/bin/debug
TARGET = MyApp_d # Debug版本添加_d后缀
} else {
DESTDIR = $$PWD/bin/release
TARGET = MyApp
}
} else {
# Linux/Mac平台
CONFIG(debug, debug|release) {
DESTDIR = $$PWD/bin/debug
} else {
DESTDIR = $$PWD/bin/release
}
}
5. 使用影子构建(Shadow Build)
Qt Creator 支持影子构建,你可以在项目设置中配置:
1.打开 项目(Project)视图
2.选择 构建(Build)设置
3.在 构建目录(Build directory)中设置路径
影子构建会在指定目录中生成所有文件,保持源码目录清洁:
pro
pro
# 如果你想让影子构建使用特定结构,可以这样设置
# 但通常影子构建的路径由Qt Creator管理
# 为影子构建设置相对路径(相对于构建目录)
DESTDIR = $$OUT_PWD/bin
OBJECTS_DIR = $$OUT_PWD/obj
MOC_DIR = $$OUT_PWD/moc
6. 清理构建文件的配置
pro
pro
# 设置清理时要删除的文件
QMAKE_CLEAN += -r $$DESTDIR
QMAKE_CLEAN += -r $$OBJECTS_DIR
QMAKE_CLEAN += -r $$MOC_DIR
QMAKE_CLEAN += -r $$RCC_DIR
QMAKE_CLEAN += -r $$UI_DIR
7. 常见问题解决方案
问题:设置后依然在源码目录生成文件
pro
pro
# 确保使用这些配置
MOC_DIR = $$PWD/build/moc
OBJECTS_DIR = $$PWD/build/obj
RCC_DIR = $$PWD/build/rcc
UI_DIR = $$PWD/build/ui
# 同时需要设置
CONFIG += object_parallel_to_source
问题:不同配置使用不同目录
pro
# 根据配置使用不同目录
contains(CONFIG, debug) {
DESTDIR = $$PWD/debug_output
} else:contains(CONFIG, release) {
DESTDIR = $$PWD/release_output
}
8. 推荐的目录结构
text
text
项目根目录/
├── src/ # 源代码
│ ├── main.cpp
│ └── mainwindow.cpp
├── include/ # 头文件
├── resources/ # 资源文件
├── build/ # 构建目录(不提交到版本控制)
│ ├── debug/
│ │ ├── obj/
│ │ ├── moc/
│ │ └── bin/
│ └── release/
└── bin/ # 最终输出目录
├── debug/
└── release/