3

私はGNUが変数内の余分な空白を無視することに慣れているので、次のことに驚きました。

## Makefile ##
PKGS = FOO BAR

FOO_DIR = foo
BAR_DIR = bar 
#            ^-------- Extra space at end of line

include $(foreach pkg, $(PKGS), $($(pkg)_DIR)/comp.mk)

default:
    @echo "Hello world!"

の後にスペースがある場合BAR_DIR = bar、makeは次のエラーで失敗します。

'make: *** bar: Is a directory.  Stop.'

ここで何が起こっているのか理解していると思います。インクルードファイルのパスにスペースがあるので、ディレクトリをインクルードしたいと考えてください。エラーが発生します。スペースが削除され、ファイルfoo/comp.mkbar/comp.mk存在する場合、makeはエラーなしで実行されます。

私の質問は、この障害を引き起こす余分なスペースから保護する方法はありますか?

4

1 に答える 1

2

stripそれを防ぐために使用できます:

include $(foreach pkg, $(PKGS), $(strip $($(pkg)_DIR))/comp.mk)

同様の理由で、foreach.

于 2013-03-13T06:28:34.127 に答える