我有一個makefile調用一個python腳本,它與makefile位於同一個目錄中。它工作得很好。
在生成文件#1:從另一個目錄中的makefile調用python腳本
auto:
./myscript.py
現在,我還有一個Makefile文件,在另一個目錄,並希望從中調用第一個生成文件。 在生成文件#2:
target:
cd $(DIR); $(MAKE) auto;
的問題是,在腳本運行時,它運行似乎是在同一個目錄的生成文件#2。在標準輸出上,在執行make之後和腳本運行之前,我看到「make [3]:離開目錄」和到#1的路徑。
在一個建議,我試過修改生成文件#2:
target:
(cd $DIR; $MAKE auto;)
但是這解釋爲 「CD IR; AKE自動」。當我替換DIR和MAKE的括號時,我會得到和以前一樣的行爲。
我試着修改python腳本,讓它假設它是在目錄#2中,並給它的路徑#1,但行爲不會改變。
發生了什麼,我該怎麼辦?
更新: 我下面的評論搞砸代碼格式化所以它在這裏:
我想這一點,並得到了你的描述基本上是什麼。可能與target自動調用「makefile.rules」文件有什麼關係?
auto:
@echo this is makefile \#1 making [email protected] in $(PWD)
FLAG=1 $(MAKE) -f makefile.rules rulestargetA
FLAG=2 $(MAKE) -f makefile.rules rulestargetB
./myscript.py
爲了簡單起見,我省略了這個事實,但現在我想知道。
更新2: 我不明白爲什麼makefile文件不會導致因爲儘管它在它所在的目錄中運行myscript.py,但我一直在試圖讓腳本運行即使從不同目錄調用時也是如此。它打開幾個子進程,在每個子進程中運行一個可執行文件,並將每個子進程的stdout保存爲文件。 Python的subprocess.Popen傳入當前工作目錄,默認情況下,該目錄是腳本從其調用的位置,而不是其駐留的位置。我已經添加了腳本,將其作爲cwd傳入到Popen呼叫中。但是,出於某種原因,當我在自己的目錄中運行myscript.py時,它可以工作,但是當我從其他地方(從命令行)調用它時,它會在proc.communicate()中掛起。我應該解決這個python問題,但我仍然想知道爲什麼外部makefile不能從它自己的目錄調用這個腳本。
我不得不羞於承認這個記錄,結果是在makefile#1中出現了剪切和粘貼錯誤。自動目標沒有使用正確的標誌調用makefile.rules,因此掛起的可執行文件(由myscript.py調用)。我能夠用直接命令創建掛起;沒有涉及任何makefile或腳本。 在調用myscript.py之前,它留下dir#1的makefile消息是一個紅色鯡魚:該腳本實際上是從dir#1調用的。我不明白,但至少它現在有效。 – jasper77 2010-08-04 18:34:29