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