Qt - 在.pro-File中使用带有目录的星号(*)

时间:2013-05-07 01:19:27

标签: qt qt-creator qmake

我有一个.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。无论如何,谢谢!]

2 个答案:

答案 0 :(得分:17)

至少在qmake 3.0中,可以使用以下内容:

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

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

答案 1 :(得分:1)

首先,使用星号是不好的做法 - 尽管qmake允许它,QtCreator无法在添加新的,重命名或删除文件时正确编辑这样的* .pro。因此,尝试使用“新文件”或“添加现有文件”对话框添加新文件。

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

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

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

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

files = $$files($$PWD/src)
win32:files ~= s|\\\\|/|g
for(file, files):!exists($$file/*):contains($$file, ".cpp"):SOURCES += $$file