2013-06-03 114 views
0

我想從makefile寫一個規則文件(makefile),我用echo命令來做到這一點, 但是當我用$來到部件時,我無法弄清楚如何做對。從makefile寫入makefile的最佳方法是什麼

我想:

$(shell echo -e "#!/usr/bin/make -f \nPYTHON3=\"$(shell py3versions -vr)\"" >>text.txt 

但我得到錯誤信息說:

py3versions: error parsing Python-Version attribute 

我想寫一個規則文件中的代碼:

#!/usr/bin/make -f 

PYTHON3=$(shell py3versions -vr) 

%: 
    dh [email protected] python3 --buildsystem=python_distutils 

override_dh_auto_build: $(PYTHON3:%=build-python%) 

...... 

任何人都可以給關於我應該使用哪個命令來創建這樣的文件的一些建議? 如果使用echo命令,輸入$是什麼方式?

要更新我的情況:

我想建立一個python Debian軟件包。上面顯示的規則文件是構建它的方式。 (調用其他功能,如

python setup.py sdist 

py2dsc, 

那麼這個規則(它被稱爲規則,而不是生成文件)後,當然文件將被調用來建立Debian包。

的規則文件可以通過py2dsc命令自動生成,但我需要修改它以使其適用於不同版本的python(比如說python2。*和python3。*)。所以我想只是從makefile中編寫rules文件(這是將調用python setup.py sdist和py2dsc和這個規則文件)爲python2。*和python3。*。

現在我正面臨這個問題:我如何以與規則文件相同的方式編寫shell命令。非常感謝!

+0

這裏增加的信息並沒有多大幫助。上面顯示的makefile沒有辦法工作,所以不能成爲「構建它的方式」。例如,先決條件'$(PYTHON3:%= build-python%)'不能工作。它會擴展到'build-python $(shell py3versions -vr)'這個值,正如我們所見,它會失敗,因爲'-r'選項需要一個參數。你真的想在這裏跑什麼? _successful_調用'py3versions'會是什麼樣子? – MadScientist

+0

爲了讓我們兩個人更容易:忘掉py3versions命令(它通過debuild命令調用而不是make,當我使用debuild時,規則文件運行良好)。假設我們有一個shell命令DATE = $(shell date)(而不是那個PYTHON3 = $(shell py3versions -vr)。我在define部分嘗試了DATE = $(shell date),我得到了命令的輸出日期規則文件。但我真正想要的只是DATE = $(shell日期)(不是執行輸出)可以完成嗎?謝謝。 – user1558064

+1

如果你問的是如何顯示靜態字符串'$(shell date)'而不是運行函數'$(shell date)',那就是我在下面的回答中解釋的:escape $' ,那麼make就不會擴展它:'echo'PYTHON3 = $$(shell date)'' – MadScientist

回答

2

使用兩個美元符號($$)從化妝逃離美元符號:

all: 
     @echo 'VAR = $$VAR' 

順便說一句,你不應該使用$(shell ...)爲了這個,我不認爲。您沒有給出makefile的完整示例,但如果您的echo命令是配方的一部分,只需直接寫入,請勿使用$(shell ...)

也只是一個說明:echo -e是不可移植的,並將不適用於所有的POSIX系統。我建議你使用printf,它可以做同樣的事情並且便攜。

+0

非常感謝。是的,這樣我可以得到我的大部分內容。但是當涉及到PYTHON3 = $(shell py3versions -vr)時,我仍然收到錯誤消息,說py3versions:錯誤解析Python版本屬性。有任何想法嗎?謝謝。 – user1558064

+2

每當遇到像這樣的問題時,首先要嘗試從shell提示符下運行它。如果你不能在那裏運行它,那麼當你從make運行它時,它顯然不會工作。當我這樣做時:'$ py3versions -vr'我得到了同樣的錯誤。看看這個幫助('py3versions --help)'我可以看到'-r'選項希望得到一個參數:'[-r | --requested ]' d試着給它一個。 – MadScientist

+0

非常感謝您的提示。是py3versions需要另一個文件名或X-python-version屬性的值。在我的情況下,我想按照它的方式將PYTHON3 = $(shell py3versions -vr)行寫入另一個文件(規則),而不是執行它。該行將從規則文件中執行(我有X-python-version屬性集)。請指出我在這裏是否有誤解。非常感謝! – user1558064