export HELLO=Hello,world
all:
@echo $(HELLO)
@echo $(shell echo $$HELLO)
@echo `echo $$HELLO`
輸出:
Hello,world
Hello,world
爲什麼會出現反引號和$(殼)之間的差異,是有辦法的環境變量傳遞給$(殼)調用?
我想在交叉編譯環境中使用pkg-config,所以我需要設置$ PKG_CONFIG_SYSROOT。我可以使用反引號,但是它會爲每個.o文件執行一次。根據Computing Makefile variable on assignment,我需要使用PKG_CFLAGS:= $(shell pkg-config $(PACKAGES)),但我無法傳入必需的環境變量以使其正常工作。
在GNU Make 4.0上測試。
在第三行中的反引號是不必要的,因爲相比於只使用'@echo $$ HELLO'不會改變任何東西。 –
是的,他們這麼做 - 重點是產生一個子殼。這比SUBSHELL_HELLO ='echo $$ HELLO'然後@echo $(SUBSHELL_HELLO)解釋得更簡潔。那裏有反引號,但註釋格式化會讓它們吃掉。 –