Force gnu make to rebuild objects affected by compiler definition
I have a makefile that takes options at the command line
make OPTION_1=1
Based on the value it will add开发者_C百科 additional compiler definitions to a subset of objects.
ifeq ($(OPTION_1), 1)
CC_FLAGS += -DOPTION_1_ON
endif
The change in the definition affects the included header file content - a stub or an implementation is exposed to the object files.
How can I get make to rebuild the files 'affected' by this option changing?
I use a file to remember the last value of such options, like this:
.PHONY: force
compiler_flags: force
echo '$(CC_FLAGS)' | cmp -s - $@ || echo '$(CC_FLAGS)' > $@
The cmp || echo
bit means the file compiler_flags
is only touched when the setting changes, so now you can write something like
$(OBJECTS): compiler_flags
to cause a rebuild of $(OBJECTS)
whenever the compiler flags change. The rule for compiler_flags will be executed every time you run make, but a rebuild of $(OBJECTS)
will be triggered only if the compiler_flags
file was actually modified.
精彩评论