10

我有一个 .pro 文件,如下所示:

SOURCES += myfolder/source1.cpp \
           myfolder/source2.cpp
HEADERS  += myfolder/header1.h\
            myfolder/header2.h
FORMS    += myfolder/form1.ui\
            myfolder/form2.ui

一切都很好。但是,如果我尝试使用星号来包含所有文件,即:

SOURCES  += myfolder/*.cpp
HEADERS  += myfolder/*.h
FORMS    += myfolder/*.ui

qmake 抛出一个文件未找到错误:

WARNING: Failure to find: myfolder\*.cpp
[...]
:-1: error: No rule to make target `myfolder/*.cpp', needed by `release/source1.o'.  Stop.

在这两种情况下,Qt-Creator 都可以找到文件。

有没有办法使用星号?手动输入文件很烦人。

谢谢!

[编辑:Qt 4.8.4、Windows 7、Qt-Creator 2.6.1。抱歉忘记了这个想法,它是不需要的。]

[编辑:找到解决方案:http: //qt-project.org/forums/viewthread/1127。还是非常感谢!]

4

2 回答 2

29

qmake 3.0,至少,可以使用类似的东西:

SOURCES = $$files(*.cpp, true)
HEADERS = $$files(*.h, true)

true参数将导致files函数递归查找与第一个参数给出的模式匹配的所有文件。

于 2016-12-13T12:58:50.420 回答
5

起初,使用星号是不好的做法——尽管 qmake 允许这样做,但 QtCreator 无法在添加新文件、重命名或删除文件时正确编辑此类 *.pro。所以尝试使用“新文件”或“添加现有文件”对话框添加新文件。

QMake 有 for 循环和函数 $$files(directory_path: String)。还将文件分别附加到 SOURCES 或 HEADERS 变量。

简要示例,它将所有文件(但不包括目录)添加到变量 FILES(不影响构建或项目树):

files = $$files($$PWD/src)
win32:files ~= s|\\\\|/|g
for(file, files):!exists($$file/*):FILES += $$file

如果要检查文件是否为 *.cpp,请尝试使用 contains($$file, ".cpp")。

files = $$files($$PWD/src)
win32:files ~= s|\\\\|/|g
for(file, files):!exists($$file/*):contains($$file, ".cpp"):SOURCES += $$file
于 2013-05-08T11:27:52.613 回答