Variables GNU在Makefile中生成变量

Variables GNU在Makefile中生成变量,variables,makefile,Variables,Makefile,我想创建一个Makefile,它还创建一个简单的脚本来运行编译后的应用程序 我有如下几点: @touch $(SCRIPT) @echo LD_LIBRARY_PATH=$(LIB_DIR) $(APP_DIR)/$(APP) $1 $2 $3 $4 $5 $6 > $(SCRIPT) @chmod +x $(SCRIPT) @echo Script successfully created. 我想要1美元2美元。。。要在脚本中完全显示为$1$2。。。表示脚本的命令行参数。我无法让它工作

我想创建一个Makefile,它还创建一个简单的脚本来运行编译后的应用程序

我有如下几点:

@touch $(SCRIPT)
@echo LD_LIBRARY_PATH=$(LIB_DIR) $(APP_DIR)/$(APP) $1 $2 $3 $4 $5 $6 > $(SCRIPT)
@chmod +x $(SCRIPT)
@echo Script successfully created.

我想要1美元2美元。。。要在脚本中完全显示为$1$2。。。表示脚本的命令行参数。我无法让它工作,因为Makefile使用$1$2作为它自己的变量。。我怎样才能做到这一点呢?

通过将
$
翻一番来摆脱它:

@echo LD_LIBRARY_PATH=$(LIB_DIR) $(APP_DIR)/$(APP) $$1 $$2 $$3 $$4 $$5 $$6 > $(SCRIPT)
如果您激活了辅助扩展(不要担心,您可能没有!),则需要将
$
再次加倍,例如,
$$$$1


顺便说一句,
@touch
命令是多余的。

使用双美元符号告诉我们,你的意思是一个字面的
$
,而不是一个变量扩展,并且在回显时使用单引号来防止外壳进一步扩展:

@echo 'LD_LIBRARY_PATH=$(LIB_DIR) $(APP_DIR)/$(APP) $$1 $$2 $$3 $$4 $$5 $$6'

我认为echo是在子shell中运行的(特别是因为有一个输出重定向),所以shell也会扩展变量。在我的回答中引用它,它对我很有用。a我想预先准备一下LD_LIBRA。。。与#保持一致/bin/bash行,但在@echo'之后/“bin/bash”脚本中不显示任何行。这次会有什么问题?你是个救生员。谢谢诀窍是在我的例子中使用
\$$i
。其中“i”是我循环中的一个变量。