У меня есть каталог уроки . На первый взгляд, в этом каталоге есть только один исходный файл hello.cc.
#include <QApplication>
#include <QLabel>
#include <QWidget>
int main(int argc, char *argv[ ])
{
QApplication app(argc, argv);
QLabel hello("<center>Welcome to my first Qt program</center>");
hello.setWindowTitle("My First Qt Program");
hello.resize(400, 400);
hello.show();
return app.exec();
}
Также в этом каталоге есть Makefile, который выглядит следующим образом:
OPT := "QT += gui widgets"
SRC := $(shell ls -tp *.cc | grep -v /$ | head -1)
PRG = $(basename $(SRC))
program: $(SRC)
qmake -project
grep -qxF $(OPT) lessons.pro || echo $(OPT) >> lessons.pro
mkdir -p $(PRG)
mv dersler.pro $(PRG)/$(PRG).pro
cp $(SRC) $(PRG)/$(SRC)
( cd $(PRG) && qmake $(PRG).pro )
( cd $(PRG) && make )
( cd $(PRG) && mv lessons $(PRG))
Когда я пытаюсь скомпилировать, это делает hello подкаталогом и исполняемым в этом каталоге.
Пока все хорошо.
Но когда я добавляю второй исходный файл, скажем, hello2.cc с тем же содержимым hello.cc, он не работает должным образом.
Выдает ошибку, подобную этой:
$ make
qmake -project
grep -qxF "QT += gui widgets" lessons.pro || echo "QT += gui widgets" >> lessons.pro
mkdir -p hello2
mv lessons.pro hello2/hello2.pro
cp hello2.cc hello2/hello2.cc
( cd hello2 && qmake hello2.pro )
WARNING: Failure to find: hello.cc
WARNING: Failure to find: hello/hello.cc
WARNING: Failure to find: hello2/hello2.cc
( cd hello2 && make )
make[1]: Entering directory '/lessons/hello2'
Makefile:374: warning: overriding recipe for target 'hello.o'
Makefile:368: warning: ignoring old recipe for target 'hello.o'
Makefile:377: warning: overriding recipe for target 'hello2.o'
Makefile:371: warning: ignoring old recipe for target 'hello2.o'
make[1]: *** No rule to make target 'hello/hello.cc', needed by 'hello.o'. Durdu.
make[1]: Leaving directory '/lessons/hello2'
Makefile:6: recipe for target 'program' failed
Также во втором каталоге нет файла с * .o расширением 'hello2.o' .
Как мне исправить эту проблему. Если я добавлю новый исходный файл, он сможет скомпилировать последний измененный исходный файл.
Редактировать:
Проблема решена. Проблема заключалась в том, что, поскольку я выполнял qmake из верхнего каталога, он добавлял все файлы hello1.cc, hello2.cc в качестве источника.
Это решается простым вызовом qmake из подкаталога.