2016-09-28 80 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 

任何配方。