我想知道是否有可能覆盖makefile中的目标!我正在工作的环境不允许我这样做,因为自动生成!我在想,如果我在静态目标之上或之下编写了相同的规则,这是否会实现覆盖?
%_emul.flist: $(if ${GEN_FLIST},%_synth.flist,) ${rdlh_file_deps}
${QUIET}if test ${SYN_DEBUG} -eq 1 ; then set -xv ; fi; \
$(if ${TOOL_VERILOG},rm -f $@; touch $@,$(if ${TOOL_BBOX_LIBS},echo ${TOOL_BBOX_LIBS} > $@,rm -f $@; touch $@))
/bin/sed -e '/\/libs\//d' -e '/\/place\//d' $(foreach mod,$(filter %.vhd,$^),-e 's%^\(.*\/\)\{0,1\}$(basename $(notdir ${mod}))\.v$$%${mod}%') $*_synth.flist >> $@发布于 2013-07-23 08:57:36
是的,我想那是可行的.但是你需要在编码的方式上更小心一点。你不会想要覆盖一些可能有用的东西!
GNU make将获取它遇到的最新目标。因此,下面的代码可以工作(但不是我所希望的:( )
输出:我认为你正在寻找这样的东西--
Kaizen ~/make_prac $ make -nf mk.name
mk.name:20: warning: overriding recipe for target `name'
mk.name:17: warning: ignoring old recipe for target `name'
arg1="Kaizen" ;
echo "hello "" ;" ;
hello ;代码:这里的目标"name“出现了两次,并被覆盖。
Kaizen ~/make_prac $ cat mk.name
##
## make to accept name and display hello name
##
arg1="" ;
.PHONY : name \
hello
#.DEFAULT :
# hello
hello : name
+ echo "hello $(arg1)" ;
name :
echo "name given is : $(arg1)" ;
name :
arg1="Kaizen" ;PS:注意:的用法--如果使用::,那么两个规则都会被执行。
arg1 ....没有显示在输出中的解释:变量arg1,即使它在第一次解析时被赋值,它也会被忽略,因为它的赋值依赖于目标。如果您在其他地方有一个变量声明--例如,在开始时定义了arg1 --就不会有任何取消引用的问题。
https://stackoverflow.com/questions/17799301
复制相似问题