Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile GNU覆盖目标?_Makefile_Gnu Make - Fatal编程技术网

Makefile GNU覆盖目标?

Makefile GNU覆盖目标?,makefile,gnu-make,Makefile,Gnu Make,我想知道是否有可能覆盖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 $@

我想知道是否有可能覆盖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 >> $@

是的,我想那会有用的。。。。但是在编写代码的方式上需要更加小心。您不想覆盖可能有用的内容

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

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

代码:此处目标“名称”出现两次并被覆盖

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" ;
注意
——如果使用
,那么这两条规则都会执行


对输出中未显示的
arg1..
的解释:变量
arg1
,即使在第一次解析中被赋值,它也会被忽略,因为它的赋值依赖于目标。如果在其他地方有变量声明,例如像
arg1
,在开始时就定义了,则不会有y取消引用问题。

是的,我认为这会起作用……但您需要在编写代码时更加小心。您不希望覆盖可能有用的内容

GNUMake将使用它遇到的最新目标

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

代码:此处目标“名称”出现两次并被覆盖

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" ;
注意
——如果使用
,那么这两条规则都会执行


对输出中未显示的
arg1..
的解释:变量
arg1
,即使在第一次解析中被赋值,它也会被忽略,因为它的赋值依赖于目标。如果在其他地方有变量声明,例如像
arg1
,在开始时就定义了,则不会有y取消引用问题。

Hmmmm可能(但不是您的想法)您可以发布一段您希望覆盖的规则吗?@AhmedMasud希望这会有帮助!您想覆盖整个模式规则(
%\u emul.flist:…
)还是只覆盖特定目标的规则(
foo\u emul.flist:…
)?是的,整个规则!我把我的自定义目标放在Makefile中比它的实现更低的位置,它似乎已经工作了!嗯,可能(但不是你的想法)你能发布一个你想要覆盖的规则片段吗?@AhmedMasud希望这会有帮助!你想覆盖整个模式规则(
%\u emul.flist:…
)或者只是特定目标的规则(
foo_emul.flist:…
)?是的,整个规则!我把我的自定义目标放在Makefile中比它的实现更低的位置,它似乎起了作用!两个目标中的一个可能有一个冒号,另一个可能有一个我编码的双冒号吗?不,你可以使用其中一个:对于两个规则,或者::对于两个,而不是组合。Make不是那么智能的yetGNU Make。此外,我认为这个演示是错误的,因为变量范围不正确。特别是没有
。ONESHELL
这种赋值将不起作用,即使
Make
解析它的方式是一致的。在我的测试中,有时可以使用像这样的简单模型,但在涉及到依赖关系树,或者发生并行处理—所有这些都会崩溃,您无法确定将调用哪个目标。这两个目标中的一个是否可能有一个冒号,而另一个是我编写的双冒号?不,您可以使用其中一个:用于规则或::用于两者,而不是组合。Make不是intelligent yetGNU Make。此外,我认为这个演示是错误的,因为变量作用域不正确。特别是没有
。ONESHELL
这种赋值不会工作,即使
Make
在解析它的方式上是一致的。在我的测试中,有时可以使用像这样的简单模型,但以防万一在涉及依赖树或发生并行处理的情况下,所有这些都会崩溃,并且您无法确定将调用哪个目标。