QT:在".pro" ffly中指定项目目录,如"build"和"src"

QT: specify project directories like "build" and "src" in ".pro" flie

本文关键字:build src 项目 pro ffly QT      更新时间:2023-10-16

我有一个这样的项目层次结构:

file.pro
src/
    files.cpp
include/
    headers.h
build/
    files.o
bin/
    finalExecutable

.pro文件中指定什么,以便qmake生成的 Makefile 从我的 src/ 目录中获取.cpp文件并将可执行文件放在 build 目录中?

对于include部分,我添加了INCLUDEPATH += include/*,除了在包含任何file.h时我必须写#include <include/file.h>而不是#include <file.h>之外,它似乎有效。如何将其放入.pro文件中,以便我可以包含#include <file.h>等标头。

我尝试添加SOURCES += src/*,但它显示错误:

error: No rule to make target 'sourceFiles/*', needed by 'mydialog.o'.  Stop.

如何指定includesrcbuild目录?

这应该很容易。只需将其包含在您的.pro文件中

MOC_DIR     = ./build/moc
OBJECTS_DIR = ./build/obj
RCC_DIR     = ./build/qrc
UI_DIR      = ./build/uic

瞧,文件夹build及其子目录是在您执行 qMake 后立即创建的。

此外,当您有本地包含时,您不应该使用它#include <localheader.h>它应该是#include "localheader.h"

将构建目录指定为源子目录并假定 qmake 在源文件夹中执行的 Qmake 文件基本上已损坏。构建任何项目(甚至是非Qt项目!(的推荐方法是从源代码开始。即:

# suppose the sources are in myproject
mkdir myproject-build
cd myproject-build
qmake ../myproject && make      # for qmake projects
cmake ../myproject && make      # for cmake projects
../myproject/configure && make  # for autotools projects

当然,明智的做法是将所有可执行文件硬链接(或复制(到构建目录的某个公共子文件夹中。这需要更多的体操。例如:

EXTRA_BINFILES += $$PWD/src/myproject # target name in src.pro
DESTDIR = $$OUT_PWD/bin
QMAKE_PRE_LINK += $$QMAKE_MKDIR_CMD $$DIR
for(FILE, EXTRA_BINFILES){
  QMAKE_POST_LINK += 
    $$QMAKE_COPY $$shell_path($$FILE) $$shell_path($$DIR) $$escape_expand(\n\t)
}

有关更多见解,请参阅此问题。