-1

这是我在 makefile 中编写的代码。出于某种原因,它不允许我执行 make 函数。当我输入“make findName”时,我得到“make: 'findName' 是最新的。”

findName:       findName.cpp
        g++ -g findName.cpp -o findName;

clean:
        /bin/rm -f findName *.o

backup:
        #tar -zcvf bbrown.assignment4_1.tar.gz *.cpp *.h makeFile readme # will make a tar.gz
        tar -cvf bbrown.findName.tar *.cpp *.sh makeFile readme
4

1 回答 1

1

像“make: 'target' 是最新的”这样的消息。意味着make根据所涉及文件的时间戳决定它不需要运行任何命令。该make程序认为文件(和虚假目标)具有先决条件树,并且与创建文件相关的命令仅在文件不存在或具有比其先决条件之一旧的时间戳时才会运行。在大型项目中,这有助于避免完全重建可能需要大量时间的所有内容,而实际上只有少数源文件发生了更改:make将确定实际需要哪些命令。但这确实需要设置Makefile准确的先决条件。

Makefile指定该文件findName具有一个先决条件:findName.cpp. 如果make成功创建findName,那么您只需make再次输入,您将看到“最新”消息:这是一项功能。如果您编辑并保存findName.cpp然后运行make,它应该重复该g++命令。

但是假设你也有一些头文件findName.cpp,比如findName.h. 如果您编辑并保存findName.h然后运行make,您将获得“最新”,因为make不知道findName.hfindName. 您需要添加先决条件来解决此问题:

findName:       findName.cpp findName.h
        g++ -g findName.cpp -o findName

有多种方法可以自动处理此类头文件依赖项,但它们可以更高级地使用make和/或使用其他构建工具。

于 2020-02-19T00:22:59.117 回答