我有一个像这样的项目层次结构:
file.pro
src/
files.cpp
include/
headers.h
build/
files.o
bin/
finalExecutable
在.pro
文件中指定的内容,以便qmake
生成的Makefile从我的.cpp
目录中获取src/
个文件,并将可执行文件放在{{1}中目录?
对于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.
,include
和src
目录?
答案 0 :(得分:2)
这应该很容易。只需将其包含在.pro
文件
MOC_DIR = ./build/moc
OBJECTS_DIR = ./build/obj
RCC_DIR = ./build/qrc
UI_DIR = ./build/uic
和voilà,一旦执行qmake,就会创建文件夹build
及其子目录。
如果您有本地包含,则不应使用#include <localheader.h>
#include "localheader.h"
答案 1 :(得分:1)
将构建目录指定为源子目录的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
当然,明智的做法是将所有可执行文件硬链接(或复制)到构建目录的某个公共子文件夹中。这需要更多的体操。 E.g:
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)
}
有关详情,请参阅this question。