Qt如果我添加第二个源文件,make会失败

时间:2019-06-03 13:36:47

标签: c++ qt makefile gnu-make

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

0 个答案:

没有答案