![]() |
1
27
你可以宣布你的一个或多个目标是 phony .
|
![]() |
2
561
这个
|
![]() |
3
15
一个技巧曾经记录在Sun手册中,
然后,假设调用了现有的makefile
自从
所有这些都适用于任何版本的
这也是值得考虑的原因
|
![]() |
4
13
有人建议,这是假的,这是绝对正确的。.phony应用于输入和输出之间的日期比较无效的任何规则。因为你没有任何目标
综上所述,您可能应该在makefile的顶部为各种文件名定义一些变量,并定义具有输入和输出部分的real make规则,这样您就可以利用make的好处,即您实际上只需要编译copmile所需的内容! 编辑:添加示例。未经测试,但这就是你的做法。虚伪
|
![]() |
5
5
如果我记得正确,“make”使用时间戳(文件修改时间)来确定目标是否是最新的。强制重新构建的常见方法是使用“touch”命令更新时间戳。您可以尝试在makefile中调用“touch”来更新其中一个目标(可能是其中一个子makefile)的时间戳,这可能会强制make执行该命令。 |
![]() |
6
4
这种简单的技术将允许makefile在不需要强制时正常工作。创建一个名为 力 在你的最后 生成文件 . 这个 力 目标将触摸默认目标所依赖的文件。在下面的示例中,我添加了 触摸myprogram.cpp . 我还添加了一个递归调用 制作 . 这将导致每次键入时都生成默认目标 作用力 .
|
![]() |
7
2
|
![]() |
8
2
我试过了,它对我有用 将这些行添加到makefile
保存并立即调用
它将重新编译所有内容 怎么搞的? 1)“新”呼叫干净。 “clean”do“rm”,它删除扩展名为“.o”的所有对象文件。 2)“新”呼叫“作出”。 “make”确保没有“.o”文件,因此它再次创建所有的“.o”。然后链接器将所有.o文件链接到一个可执行输出中 祝你好运 |
![]() |
9
1
按照Miller的说法
Recursive Make Considered Harmful
你应该避免打电话
当然,有了GNU,避免起来很麻烦。即使他们意识到这个问题,这也是他们有据可查的做事方式。 奥托什 makepp 已创建作为此问题的解决方案。您可以在每个目录级别上编写makefile,但是它们都被绘制到项目的完整视图中。
但是传统的makefile是递归写入的。所以有个解决办法
|
![]() |
10
1
如果不需要保留已成功编译的任何输出
重建一切 |
![]() |
11
0
这实际上取决于目标是什么。如果它是假的目标(即目标与文件无关),则应将其声明为.phony。 但是,如果目标不是假的目标,但您只是出于某种原因(例如,当您使用uuu time_uuuuuu预处理宏时),您应该使用此处答案中描述的强制方案。 |
![]() |
12
0
|
![]() |
13
0
已经提到过了,但我想我可以增加使用
如果你
源文件timstamp是
例如:如果项目是C++项目,那么
|
![]() |
14
-1
在我的Linux系统(Centos6.2)上,声明target.phony和创建一个对force的假依赖之间存在显著的差异,当规则确实创建了一个与目标匹配的文件时。每次必须重新生成文件时,都需要 对文件的假依赖强制,对假依赖的假依赖为.phony。 错误:
正确的:
|
![]() |
CaTx · 使用带有一个大于号和两个大于号的回波的区别 2 年前 |
![]() |
Ari157 · x86_64 Linux程序集中的逻辑与实现 2 年前 |
![]() |
Ty Q. · 分段故障GLFW3/GLAD 3 年前 |
![]() |
ShortArrow · 如何使用git管理链接源文件? 3 年前 |
![]() |
Bastien L. · 多Linux Grafana集成 3 年前 |