【发布时间】:2010-05-23 10:18:54
【问题描述】:
我正在编写的程序的一个要求是它必须能够信任配置文件。为了做到这一点,我在编译时使用了几种散列算法来生成文件的散列,这会生成一个带有散列作为常量的标头。
对此的依赖非常简单,我的程序依赖于 config_hash.h,它有一个生成它的目标。
makefile 看起来像这样:
config_hash.h:
$(SH) genhash config/config_file.cfg > $(srcdir)/config_hash.h
$(PROGRAM): config_hash.h $(PROGRAM_DEPS)
$(CC) ... ... ...
我正在使用 gcc 的 -M 选项,这对于处理依赖关系非常有用。如果我的标题发生变化,我的程序将被重建。
我的问题是,我需要能够判断配置文件是否已更改,以便重新生成 config_hash.h。我不太确定如何解释这种对 GNU make 的依赖。
我尝试将 config/config_file.cfg 列为 config_hash.h 的依赖项,并为 config_file.cfg 提供 .PHONY 目标但没有成功。显然,我不能依靠 -M 切换到 gcc 来帮助我,因为配置文件不是任何目标代码的一部分。
有什么建议吗?不幸的是,我不能发布很多 Makefile,或者我会发布整个内容。
【问题讨论】:
-
你试过运行“make -d”吗?你会得到很多输出(-d 的变体可能会提供更少的输出但仍然足够,请参阅 make --help),但是将 config_hash.h list config_file.cfg 作为依赖项应该可以工作。我的猜测是目标名称没有正确匹配:您的目标可能需要是 $(srcdir)/config_hash.h,具体取决于 config/config_file.cfg,例如... make -d 应该很明显。 (此外,检查 gcc -M 生成的 .d 文件也可能会有所帮助。)
标签: c gcc dependencies gnu-make