1

メイクファイルでターゲットをオーバーライドできるかどうか疑問に思っています! 私が働いている環境では、自動生成のためにこれを行うことができません! 同じルールを静的ターゲットの上または下にコーディングした場合、これはオーバーライドを達成するのでしょうか?

%_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 >> $@
4

1 に答える 1

1

はい、うまくいくと思います....しかし、コーディングの方法にはもう少し注意する必要があります。役に立つかもしれないものをオーバーライドしたくありません!

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  ;

コード: ここでは、ターゲットの「名前」が 2 回表示され、上書きされます。

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は、最初の解析で割り当てられますが、その割り当てはターゲットに依存するため、無視されます。たとえば、最初に like が定義されているなど、別の場所で変数宣言を行っていた場合arg1、逆参照の問題は発生しません。

于 2013-07-23T00:57:36.047 に答える