首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GNU覆盖目标?

GNU覆盖目标?
EN

Stack Overflow用户
提问于 2013-07-23 07:45:45
回答 1查看 6.8K关注 0票数 1

我想知道是否有可能覆盖makefile中的目标!我正在工作的环境不允许我这样做,因为自动生成!我在想,如果我在静态目标之上或之下编写了相同的规则,这是否会实现覆盖?

代码语言:javascript
复制
%_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 >> $@
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-23 08:57:36

是的,我想那是可行的.但是你需要在编码的方式上更小心一点。你不会想要覆盖一些可能有用的东西!

GNU make将获取它遇到的最新目标。因此,下面的代码可以工作(但不是我所希望的:( )

输出:我认为你正在寻找这样的东西--

代码语言:javascript
复制
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“出现了两次,并被覆盖。

代码语言:javascript
复制
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 --就不会有任何取消引用的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17799301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档