这个想法是一个项目有一个文件,其中有__DATE__
和__TIME__
。重新编译它可能会很酷,但不会明确更改其修改日期。如何强制重新编译Makefile中的单个文件?
编辑:$(shell touch -c ..)可能是一个很好的解决方案,只要笨拙。
这个想法是一个项目有一个文件,其中有__DATE__
和__TIME__
。重新编译它可能会很酷,但不会明确更改其修改日期。如何强制重新编译Makefile中的单个文件?
编辑:$(shell touch -c ..)可能是一个很好的解决方案,只要笨拙。
标准成语是有目标文件(未在源文件!)取决于目标不存在,也没有规则或依赖关系(该目标通常称为FORCE),像这样
always-recompile.o: FORCE
FORCE:
但是,如果名为“FORCE”的文件以某种方式被创建,这将会中断。随着GNU让你可以改用特殊目标.PHONY,它没有这个限制,但需要你有一个明确的规则来重建该文件:
always-recompile.o:
$(CC) $(CFLAGS) -c -o always-recompile.o always-recompile.c
.PHONY: always-recompile.o
详情请参阅http://www.gnu.org/software/make/manual/html_node/Phony-Targets.html。
执行此操作的一种方法是在运行make
之前删除相应的目标文件(.o
或.obj
)。这将触发重新编译(和重新链接)而不更改源文件修改日期。
这可能是您的问题的错误解决方案。某些版本控制工具可以转储源版本的详细信息。在构建过程中有一些脚本hackery,并将这些细节内置到您的代码中。如果您必须在十年内查看源代码并重新构建,则无关紧要 - 您的版本信息仍会反映该代码的详细信息。 – Steve314 2010-07-22 00:40:54
@ Steve314:更有可能他想要一个提到构建号和构建日期的about box。 – 2010-07-22 00:55:43
@Ken - 如果是这样,版本控制工具技巧是正确的。没有理由说明为什么脚本hackery不能将版本信息放入代码(或资源文件)中,而将内部版本号码放入关于框的内容可能需要轻易忘记的人工干预。编译器和文件系统都不知道你的内部版本号。 – Steve314 2010-07-22 01:08:50