makefile - Update a target when a passed variable changes -
my makefile:
ifndef vec_len vec_len = 1 endif my_target: a.c gcc a.c -dvec_len=$(vec_len)
is there way tell make my_target should updated when vec_len changes?
update:
my scripts (and work): makefile
shell := /bin/bash # define answer if not defined yet answertolifetheuniverseandeverything ?= 42 # update header file if answer has changed # := executes shell command, = not! quote http://www.gnu.org/software/make/manual/make.html: # immediate = deferred # immediate := immediate dummy := $(shell ./updateanswer.sh $(answertolifetheuniverseandeverything) >logmakefile.txt) answer : answer.h echo "updated!" touch answer
updateanswer.sh
#!/bin/bash # check if definition of answer has changed in header file # if yes, re-write it. if not, not touch avoid updated timestamp. if grep -q "answer ${1}" answer.h echo "answer unchanged, still ${1}." else echo "#define answer ${1}" >answer.h echo 'answer has changed:' cat answer.h fi
example output:
simon@x220:~$ make echo "updated!" updated! touch answer simon@x220:~$ make make: `answer' date. simon@x220:~$ make answertolifetheuniverseandeverything=3 echo "updated!" updated! touch answer simon@x220:~$ make answertolifetheuniverseandeverything=3 make: `answer' date.
assuming language c
, think straightforward way probably:
- prepares
vec_len.h
has line#define vec_len 1
- adds
#include "vec_len.h"
in a.c - if
vec_len
's value has updated, rewritesvec_len.h
- builds using usual
.c
file , header file dependency
edit:
though little naive way, following change work in situation?
prepares script(define.sh) following:
#!/usr/bin/bash echo '#define vec_len' $1 > vec_len.h
and adds following lines @ beginning of makefile:
vec_len ?= 1 dummy := $(shell define.sh $(vec_len))
Comments
Post a Comment