Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GNU Make - Dependencies on non program code

A requirement for a program I am writing is that it must be able to trust a configuration file. To accomplish this, I am using several kinds of hashing algorithms to generate a hash of the file at compile time, this produces a header with the hashes as constants.

Dependencies for this are pretty straight forward, my program depends on config_hash.h, which has a target that produces it.

The makefile looks something like this :

config_hash.h:
    $(SH) genhash config/config_file.cfg > $(srcdir)/config_hash.h

$(PROGRAM): config_hash.h $(PROGRAM_DEPS)
    $(CC) ... ... ... 

I'm using the -M option to gcc, which is great for dealing with dependencies. If my header changes, my program is rebuilt.

My problem is, I need to be able to tell if the config file has changed, so that config_hash.h is re-generated. I'm not quite sure how explain that kind of dependency to GNU make.

I've tried listing config/config_file.cfg as a dependency for config_hash.h, and providing a .PHONY target for config_file.cfg without success. Obviously, I can't rely on the -M switch to gcc to help me here, since the config file is not a part of any object code.

Any suggestions? Unfortunately, I can't post much of the Makefile, or I would have just posted the whole thing.


1 Answers

Declaring the file in .PHONY is wrong. Any dependency listed there will not be checked in the filesystem. Just list it as a dependency for the hash header and go from there.

like image 153
Ignacio Vazquez-Abrams Avatar answered May 18 '26 17:05

Ignacio Vazquez-Abrams