我有一个项目,其中包含所有.h和.cpp文件。该项目构建我的应用程序。另一个项目包含我的所有单元测试,它需要与第一个项目相同的.h和.cpp文件。因此,每次我向第一个项目添加新文件时,我都必须将其添加到第二个项目中,这就是为什么我尝试自动执行该步骤。
为此我尝试使用qmake的文件(glob)功能,看起来基本上是这样的:
HEADERS += \
someotherstuff.h \
files(../Core/DriveProgramInterface/*.h) \
files(../Core/DriveProgramWizard/*.h)
SOURCES += \
someotherstuff.cpp \
files(../Core/*.cpp) \
files(../Core/DriveProgramInterface/*.cpp) \
files(../Core/DriveProgramWizard/*.cpp)
因此,虽然它与标题配合得很好但它根本不适用于源代码。当我尝试编译时,我收到以下错误:
没有规则来制作'debug / .o'所需的目标'文件(../ Core / DriveProgramWizard / .cpp)。停止
所以我查看了我的MakeFile,我发现了这个:
SOURCES = \
someotherstuff.cpp \
files(..\Core\*.cpp) \
files(..\Core\DriveProgramInterface\*.cpp) \
files(..\Core\DriveProgramWizard\*.cpp) \
OBJECTS = \
someotherstuff.cpp \
debug/*.o \
debug/*.o \
debug/*.o \
所以我想,也许问题是,在MakeFile中没有解决glob,而是尝试生成* .o文件。我真的没有那么肯定,如果这是正确的,那么如果有其他原因导致这种情况无效,请随时指出我。
另外,如果您有任何建议我如何使这项工作(使用files()函数或不使用,我不在乎),我将非常感激。
答案 0 :(得分:3)
我最近发现qmake会自动扩展像* .cpp这样的简单表达式,而不需要任何特殊的全局函数。
所以我建议将您的SOURCES行更改为:
SOURCES += someotherstuff.cpp
SOURCES += ../Core/*.cpp
SOURCES += ../Core/DriveProgramInterface/*.cpp
SOURCES += ../Core/DriveProgramWizard/*.cpp
答案 1 :(得分:0)
在某些情况下只添加:SOURCES += ../OtherDir/*.cpp
不起作用并且运行生成的Makefile会抱怨:
No rule to make target '/../OtherDir/*.cpp', needed by 'release/*.o' [or 'debug/*.o']
在这种情况下,解决方案是将$$qoute($$PWD/...)
包裹在具有通配符*的路径周围:
SOURCES += $$quote($$PWD/../OtherDir/*.cpp)
HEADERS += $$quote($$PWD/../OtherDir/*.h)
这样就可以创建一个有效的Makefile
,并且构建成功。
我认为其中一个案例是将*.cpp/*.h
添加到子项目,该项目嵌套在超级项目中(即项目中包含TEMPLATE=subdir
的项目.pro文件)。
它也可能有所帮助,提到我在Windows/MinGW32
平台上工作,问题可能与此平台有关。