Qt, если я добавлю второй исходный файл, make потерпит неудачу - PullRequest
0 голосов
/ 03 июня 2019

У меня есть каталог уроки . На первый взгляд, в этом каталоге есть только один исходный файл 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 из подкаталога.

...