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

Mat*_*ein 7 qt qmake qt-creator

我有一个.pro文件,看起来像:

SOURCES += myfolder/source1.cpp \
           myfolder/source2.cpp
HEADERS  += myfolder/header1.h\
            myfolder/header2.h
FORMS    += myfolder/form1.ui\
            myfolder/form2.ui
Run Code Online (Sandbox Code Playgroud)

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

SOURCES  += myfolder/*.cpp
HEADERS  += myfolder/*.h
FORMS    += myfolder/*.ui
Run Code Online (Sandbox Code Playgroud)

qmake抛出一个file-not-found-error:

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

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

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

谢谢!

[编辑:Qt 4.8.4,Windows 7,Qt-Creator 2.6.1.因忘记这个想法而不想要它.

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

jco*_*jco 18

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

SOURCES = $$files(*.cpp, true)
HEADERS = $$files(*.h, true)
Run Code Online (Sandbox Code Playgroud)

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

  • 似乎没有记录的小笔记:`$$files()` 似乎不支持文件夹的通配符,只支持文件。 (2认同)

Ser*_*bir 6

首先,使用星号是不好的做法 - 尽管 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
Run Code Online (Sandbox Code Playgroud)

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

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