这是我在 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
最佳答案
诸如“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.h
对 findName
有影响。您需要添加先决条件来解决此问题:
findName: findName.cpp findName.h
g++ -g findName.cpp -o findName
有多种方法可以自动处理此类 header 依赖项,但它们需要更高级地使用 make
和/或使用其他构建工具。
关于linux - MakeFile 不像可执行文件那样发光,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60291154/