2016-09-28 47 views
0

我没有找到任何关于该文件的信息,并且我正在尝试在我的Makefile中写入此规则。以文本形式打印Makefile变量

setenv: 
    @echo "export DYLD_LIBRARY_PATH=." 
    @echo "export DYLD_INSERT_LIBRARIES=$(NAME).so" 
    @echo "export DYLD_FORCE_FLAT_NAMESPACE=1" 
    @echo "# Run eval $$(make setenv)" 

所以,在我的终端上运行eval $(make setenv),环境变量将被设置。

但它开始了一个无限循环。

我也尝试:

\$(make setenv) 

,但没有工作......,这是什么正确的语法?

编辑:

\$$(make setenv)的伎俩!

+0

你想达到什么目的?为什么导出命令会回显? '$$(...)'将扩展为'$(...)',这是shell替换。 –

+0

它写在最后一行,命令被回显使用'eval'来启动它们。我发现比'$(shell export ...)更清洁' –

+0

如果您只是使用Makefile为其他设置设置环境变量,shell脚本将更适合您。如果您需要其他食谱的变量,请参阅我的答案。 –

回答

1

如果你设置其他的食谱环境变量,请注意:

  • 使用$(shell export ...)将无法​​正常工作:$(shell ...)总是产生一个新的外壳,因此被导出到任何东西将不可用在该特定调用之外;
  • 在配方中使用export shell命令仅在使用.ONESHELL(不推荐)时才起作用,因为每个配方行都在不同的shell中运行。

的典型方式对环境变量导出到子品牌和子壳是用export作为一个Makefile指令,如:

export DYLD_LIBRARY_PATH=. 
export DYLD_INSERT_LIBRARIES=$(NAME).so 
export DYLD_FORCE_FLAT_NAMESPACE=1 

任何配方。