我有一个教训目录。乍一看,此目录中只有一个源文件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即可解决此问题。