我写的程序的一个要求是它必须能够信任配置文件。为了达到这个目的,我使用了几种哈希算法来在编译时生成文件的哈希值,这会产生一个哈希值为常量的头文件。GNU Make - 非程序代码的依赖关系
这个的依赖性非常直接,我的程序依赖于config_hash.h,它有一个产生它的目标。
的makefile文件看起来是这样的:
config_hash.h:
$(SH) genhash config/config_file.cfg > $(srcdir)/config_hash.h
$(PROGRAM): config_hash.h $(PROGRAM_DEPS)
$(CC) ... ... ...
我使用-M选项的gcc,这是伟大的处理依赖。如果我的标题改变了,我的程序就会重建。
我的问题是,我需要能够判断配置文件是否已经更改,以便重新生成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列表config_file.cfg作为依赖项应该有效。我的猜测是目标名称没有正确匹配:您的目标可能需要为$(srcdir)/config_hash.h,具体取决于config/config_file.cfg,例如... make -d应该明显。 (另外,检查gcc -M生成的.d文件也可能会对某些事情有所帮助。) – leander 2010-05-23 02:07:03