Pourquoi ne pas les variables d'environnement de travail dans $(shell) de commandes?

export HELLO=Hello,world
all:
        @echo $(HELLO)
        @echo $(shell echo $$HELLO)
        @echo `echo $$HELLO`

sorties:

Hello,world

Hello,world

Pourquoi est-il une différence entre backtick et $(shell), et est-il un moyen de passer les variables d'environnement $(shell) les invocations?

Je suis en train d'utiliser pkg-config dans un cross-compilation de l'environnement, j'ai donc besoin de définir $PKG_CONFIG_SYSROOT. Je peux utiliser backticks, mais c'est exécutée une fois pour toutes .o fichier. Comme par Le calcul de Makefile variable sur cession, j'ai besoin d'utiliser PKG_CFLAGS := $(shell pkg-config $(PACKAGES)), mais je ne peux pas passer dans la variable d'environnement afin de faire ce travail correctement.

Testé sur GNU Make 4.0.

  • Les backticks dans la troisième ligne sont inutiles et ne changez rien contre seulement à l'aide de @echo $$HELLO.
  • Oui, ils le font - le point de lancer un shell interne est exécuté. Il était plus concis pour l'expliquer de cette façon que SUBSHELL_HELLO=echo $$HELLO puis @echo $(SUBSHELL_HELLO) Il y avait des backticks là, mais les commentaires de formatage mange.
InformationsquelleAutor Dan Merillat | 2015-10-15