2013-05-07 34 views
3

我有一个.pro文件,它看起来像:Qt的 - 在的.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的创建者可以找到这些文件。

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

谢谢!

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

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

+1

Qt的哪个版本,以及您使用的是哪个操作系统? – 2013-05-07 04:21:03

回答

1

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

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

简单的例子,它增加了所有文件,而不是目录变量文件(不影响建或项目树):

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

如果你想检查文件是否为*的.cpp,尝试使用包含($$文件,“.cpp”)。

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

qmake 3.0,至少,它可以使用类似:

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

true参数会导致files功能递归找到相匹配的第一个参数给出的模式的所有文件。