我正在尝试使用Qt编译一个小应用程序,但没有使用QMake,但每当我尝试运行它时,我收到以下错误消息:
g++ -c -g -pg -Wall -Wextra -pipe -c -o ../../MOCFiles/moc_projectModel.o ../../MOCFiles/moc_projectModel.cpp
In file included from ../../MOCFiles/moc_projectModel.cpp:10:0:
../../MOCFiles/../Src/ProjectStructure/projectModel.h:4:30: fatal error: QAbstractItemModel: No such file or directory
compilation terminated.
make: *** [../../MOCFiles/moc_projectModel.o] Error 1
这似乎表明我没有正确构建我的$(INCLUDE)
变量,但它如下:
INCLUDE = -I/usr/include/qt4 \
-I/usr/include/qt4/QtGui \
-I/usr/include/qt4/QtCore \
-I/usr/include/qt4/QtXml \
-I/usr/share/qt4/mkspecs/linux-g++ \
-I../../Src/ProjectStructure
我可以在/usr/include/qt4/QtCore/
中找到QAbstractItemModel文件,该目录是我的include变量的一部分。这是我第一次编写GNU Makefile,我不确定它是什么,我做错了。作为参考,整个文件包含在这里:
CXX = g++
CXXFLAGS = -c -g -pg -Wall -Wextra -pipe
LINK = g++
LIBS = -L/usr/lib \
-L/usr/lib/i386-linux-gnu \
-lgtest \
-lQtGui \
-lQtCore \
-lQtXml \
-lpthread
INCLUDE = -I/usr/include/qt4 \
-I/usr/include/qt4/QtGui \
-I/usr/include/qt4/QtCore \
-I/usr/include/qt4/QtXml \
-I/usr/share/qt4/mkspecs/linux-g++ \
-I../../Src/ProjectStructure
OBJECTS = ../Objects/main.o \
../Objects/test_projectEntity.o \
../Objects/moc_test_projectModel.o \
../../Objects/projectEntity.o \
../../Objects/projectModel.o \
../../MOCFiles/moc_projectModel.o
../../Binaries/tests: $(OBJECTS)
$(LINK) $^ $(LIBS) -o $@
../Objects/main.o : ../Src/main.cpp
$(CXX) $(CXXFLAGS) $(INCLUDE) ../Src/main.cpp -o ../Objects/main.o
../Objects/moc_test_projectModel.o : ../MOCFiles/moc_test_projectModel.cpp
$(CXX) $(CXXFLAGS) $(INCLUDE) ../MOCFiles/moc_test_projectModel.cpp -o ../Objects/moc_test_projectModel.o
../../MOCFiles/moc_test_projectModel.cpp : ../Src/test_projectModel.cpp
moc ../Src/test_projectModel.cpp -o ../MOCFiles/moc_test_projectModel.cpp
../Objects/test_projectEntity.o : ../Src/test_projectEntity.cpp
$(CXX) $(CXXFLAGS) $(INCLUDE) ../Src/test_projectEntity.cpp -o ../Objects/test_projectEntity.o
clean:
rm -f ../Objects/main.o ../Objects/test_projectEntity.o ../Objects/test_projectModel.o
答案 0 :(得分:2)
看起来您正在尝试构建../../Binaries/tests
。其中一个preqs是../../MOCFiles/moc_projectModel.o
,但没有明确的规则来构建它,因此Make使用隐式规则并尝试这样做:
g++ -c -g -pg -Wall -Wextra -pipe -c -o ../../MOCFiles/moc_projectModel.o ../../MOCFiles/moc_projectModel.cpp
请注意,那里没有提到INCLUDE
。所以g ++不知道要查看/usr/include/qt4/QtCore/
。简单的解决方案是添加规则:
../../MOCFiles/moc_projectModel.o : ../../MOCFiles/moc_projectModel.cpp
$(CXX) $(CXXFLAGS) $(INCLUDE) $< -o $@
请注意,我在那里使用automatic variables $<
和$@
来减少冗余和混乱。我们也可以将它变成一个模式规则:
../../MOCFiles/%.o : ../../MOCFiles/%.cpp
$(CXX) $(CXXFLAGS) $(INCLUDE) $< -o $@
这将处理moc_projectModel.o
以及具有相同模式的任何其他内容(MOCFiles/
中的源和对象)。我们可以进行其他改进,但这应该足以让您启动并运行。