1

以下は、MinGW msys と Cygwin でテストされています。
makefile で偽のターゲット EXPORT_ALL_VARIABLES を定義してからサブ make を実行すると、ドットを含む変数はエクスポートされません。
したがって、CFLAGSはエクスポートされますが、CFLAGS.cppCFLAGS.cはエクスポートされません。

これは文書化された機能ですか? 合理的とは何ですか?
すべての変数をエクスポートする方法はありますか?

例:

test1.mak

CFLAGS=-O2
CFLAGS.cpp=-O2 -fno-rtti
all:
    $(MAKE) -f test2.mak
.EXPORT_ALL_VARIABLES:

test2.mak

$(info CFLAGS='$(CFLAGS)')
$(info CFLAGS.cpp='$(CFLAGS.cpp)')
all:
    @echo Done

出力:

make -f test1.mak 
CFLAGS='-O2'
CFLAGS.cpp=''
Done
4

1 に答える 1

2

POSIX sh の環境変数に「.」を含めることはできません。それを試してみてください:

$ FOO.BAR=foobar
FOO.BAR=foobar: command not found

Make は、シェルに有効な変数のみをエクスポートします。

GNU make マニュアルには次のように書かれています。

If you use export by itself to export variables by
default, variables whose names contain characters other than
alphanumerics and underscores will not be exported unless specifically
mentioned in an export directive.

その後:

you can write a rule for the special target
.EXPORT_ALL_VARIABLES instead of using the export directive.

したがって、そのターゲットは単独で使用するのと同じものexportであり、同じ制限があります。

于 2013-06-02T15:06:00.603 に答える