簡體   English   中英

makefile匹配任何東西為前提

[英]makefile match-anything as a prerequisite

我有一個帶有四個目標的makefile。 這些目標中的兩個可以被復制,因此可能有許多目標需要作為先決條件運行(它們是雙冒號目標 )。 其中兩個目標是任何比賽規則 不幸的是,它根本無法像我期望的那樣工作。 我從這個開始:

.PHONY:
build_%: pre_build post_build _internal_%
        @echo "4. $@: $^"

.PHONY: pre_build
pre_build::
        @echo "1. $@: $^"

.PHONY: _internal_%
_internal_%:
        @echo "2. $@: $^"

.PHONY: post_build
post_build::
        @echo "3. $@: $^"

那給了我這個輸出:

make build_foo
1. pre_build: 
3. post_build: 
2. _internal_foo: 
4. build_foo: pre_build _internal_foo post_build

如果我明確要求先決條件,例如:

.PHONY:
build_%: pre_build post_build _internal_%
        @echo "4. $@: $^"

.PHONY: pre_build
pre_build::
        @echo "1. $@: $^"

.PHONY: _internal_%
_internal_%: pre_build
        @echo "2. $@: $^"

.PHONY: post_build
post_build:: _internal_%
        @echo "3. $@: $^"

相反,我得到這個:

make build_foo
1. pre_build: 
make: *** No rule to make target `pre_build'.  Stop.

我需要做些什么才能使像這樣的依賴項工作? 我正在使用GNU Make 3.81。

這似乎是GNU Make 3.81中的真實錯誤。

我建議這種解決方法:

define prebuild
@echo "1. pre_build: $^"
endef

define postbuild
@echo "3. post_build: $^"
endef

.PHONY:
build_%: _internal_%
        @echo "4. $@: $^"

.PHONY: _internal_%
_internal_%:
        $(prebuild)
        @echo "2. $@: $^"
        $(postbuild)

# pre_build and post_build are not used here, but may still be used elsewhere

.PHONY: pre_build
pre_build::
    $(prebuild)

.PHONY: post_build
post_build::
        $(postbuild)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM