2012-04-26 4 views
0

QMake를 사용하지 않고 Qt를 사용하여 작은 애플리케이션을 컴파일하려고하는데, 실행하려고 할 때마다 다음과 같은 오류 메시지가 :QMake를 사용하지 않고 Qt 프로젝트를 빌드 할 때 '해당 파일이나 디렉토리가 없습니다.'오류가 발생했습니다.

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 

내가있는 QAbstractItemModel 파일을 찾을 수 있어요 /usr/include/qt4/QtCore/, 디렉터 내 포함 변수의 일부인 ry. GNU Makefile을 작성한 것은 이번이 처음이며 잘못되었다고 확신 할 수 없습니다. 참고로, 전체 파일이 여기에 포함됩니다 : 당신이 ../../Binaries/tests 구축을 위해 노력하고있는 것처럼

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 [email protected] 

../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 

답변

2

것 같습니다. preqs 중 하나는 ../../MOCFiles/moc_projectModel.o하지만, 그 구축을위한 명시 적 규정이 없다, 그래서 확인 암시 적 규칙과 시도이 사용이 INCLUDE에 대한 언급이 없다는 것을

g++ -c -g -pg -Wall -Wextra -pipe -c -o ../../MOCFiles/moc_projectModel.o ../../MOCFiles/moc_projectModel.cpp 

공지 사항. 그래서 g ++는 /usr/include/qt4/QtCore/을 볼 줄 모른다. 나는 중복과 혼란을 줄이기 위해이 automatic variables$<[email protected]을 사용

../../MOCFiles/moc_projectModel.o : ../../MOCFiles/moc_projectModel.cpp 
    $(CXX) $(CXXFLAGS) $(INCLUDE) $< -o [email protected] 

주의 사항 : 간단한 해결책은 규칙을 추가하는 것입니다. 우리는 또한 패턴 규칙으로 만들 수 :

../../MOCFiles/%.o : ../../MOCFiles/%.cpp 
    $(CXX) $(CXXFLAGS) $(INCLUDE) $< -o [email protected] 

moc_projectModel.o의 관리와 같은 패턴이있다 (소스 및 MOCFiles/ 모두 객체) 다른 작업을합니다. 우리는 다른 개선을 할 수는 있지만, 그것은 당신을 기동시키고 운영하는데 충분할 것입니다.

+0

감사합니다. 그 트릭을 :) –