【发布时间】:2014-09-15 00:50:03
【问题描述】:
所以我在尝试弄清楚如何制作我的 Makefile 时遇到了一些困难,以便当我执行 make 并编译发布版本然后稍后执行 make debug 它编译调试版本时如果文件尚未更新,则在 gcc 上设置新的 -DDEBUG 和 -g。
例如:
- main.cpp 已编辑
- 运行
make - 编译 main.cpp
- 运行
make debug - main.cpp 未重新编译,因为即使编译的标志不同,也没有更改
请注意,我不想每次都进行清理,因为如果我连续执行 2 个makes,我不想重新编译文件,因此将清理设置为依赖项不会成为这里的有效答案
【问题讨论】:
-
有这样的例子,有些甚至可能在这个网站上,但一般的想法是你将编译器标志写入一个文件,将该文件列为编译对象的先决条件,列出一个当当前标志与旧标志不同时,您将当前标志与之比较并更新初始 prereq 文件的修改时间(和内容)的临时文件上的该文件的强制先决条件。
-
我的回答遵循 Etan 所说的总体思路。我的答案的特殊功能(在不同的线程中提到)是它隐藏了这个黑客实现的复杂性,对 Makefile 用户 - 通常是更新特定“包”Makefile 的人。他们只想要简单的界面,就像我指定的那样,他们只想以与依赖文件相同的灵活方式“依赖”某个变量,而不想知道它在幕后是如何发生的。