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:

  1. prepares vec_len.h has line #define vec_len 1
  2. adds #include "vec_len.h" in a.c
  3. if vec_len's value has updated, rewrites vec_len.h
  4. 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

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -