我正在使用自动制作。
我希望每次运行“ make”时都运行一个脚本。
此脚本执行git diff并生成diff的MD5总和。
散列在repos_version.h中作为#define写入 例如:
#define REPOS_DIFF "-190886e9f895e80c42cf6b426dc85afd"
仅当该文件不存在或差异与repos_version.h中的文件不同时,脚本才会重写该文件。但是该脚本需要针对每个品牌运行。
main.c包含repos_version.h并在运行可执行文件时打印出哈希值。
这里是Makefile.am的尝试1
all: config.h
@chmod +x gen_diff_hash.sh
@./gen_diff_hash.sh
$(MAKE) $(AM_MAKEFLAGS) all-recursive
这项工作,但是出现以下错误
Makefile:1234:警告:目标all'
Makefile:734: warning: ignoring old recipe for target
全部的替代配方”
这里是Makefile.am的尝试2
all-local:
@chmod +x gen_diff_hash.sh
@./gen_diff_hash.sh
main.c: repos_version.h
但是,这不起作用,因为全本地运行似乎太迟了。第二次运行“ make”确实获得了预期的结果,但是那不是亚军。
所以都不是太好。 有任何想法吗? 我一直在阅读automake hooks文档,但是看不到任何适合我需要的东西。
答案 0 :(得分:0)
通过$(shell ./gen_diff_hash.sh)
执行该脚本并将其分配给一个可抛弃的变量(或在其他诸如ifeq之类的其他结构中使用它),可以确保每次Make脚本都始终运行。
请注意,this is not POSIX和在非GNU的Make实现上不是有效的语法。 GNU Make 4.x也支持使用VAR != ./gen_diff_hash.sh
,至少与BSD Make兼容。
但是,最好创建一个运行脚本的.PHONY: gendiff
目标,并使标头依赖于此gendiff
。然后,每次Make检查repos_version.h是否是最新的,而不是每次Make运行时,都会重新评估目标。