我有一个项目,其中包括我的所有.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)
因此,虽然它与头很好地工作,但它根本不与源一起工作。当我试图编译时,我会得到以下错误:
“
/.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 \
所以,我想,也许问题是,这个glob不是在MakeFile中解决的,而是试图生成*.o文件。我真的一点也不确定,如果这是正确的,所以如果有其他的原因,这不起作用,欢迎指点我。
此外,如果您有任何建议,我可以如何使这项工作(与文件()功能,或没有,我不在乎),我将非常感谢。
发布于 2017-12-12 06:00:06
在某些情况下,只添加: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
添加到子项目中,该子项目嵌套在超级项目中(即在其项目.pro文件中使用TEMPLATE=subdir
的项目)。
这也可能有帮助,提到我在Windows/MinGW32
平台上工作,这个问题可能与这个平台有关。
https://stackoverflow.com/questions/9464003
复制