2014-06-10 120 views
1

我試圖在引用SO Run Executable from makefile上的某個鏈接後運行可執行文件。一切正常,只需要輸入「make run」即可執行所有命令。我想知道如何運行它,而無需鍵入run,只需讓它運行一切即可。截至目前,make命令只執行規則並運行另一部分,我必須使用make run。我是Make的新手。你能幫我改進一下代碼嗎?任何幫助表示讚賞。生成運行可執行文件的make文件

all: rdata.c 
    -sudo rm a.out 
    -gcc rdata.c -o a.out 

exec: run 

run: all 
    -sudo ./a.out 
    sudo javac -classpath /home/hduser/12115_Select_Query/hadoop-core-1.1.2.jar -d mysort MySort.java 
    sudo jar -cvf mysort.jar -C mysort/ . 
    -hadoop fs -rmr MySort/output 
    -hadoop fs -rmr MySort/input 
    hadoop fs -mkdir MySort/input 
    hadoop fs -put Data/data.txt MySort/input  
    hadoop jar mysort.jar org.myorg.MySort MySort/input MySort/output 
    -sudo rm /home/hduser/Out/sort.txt 
    hadoop fs -copyToLocal MySort/output/part-r-00000 /home/hduser/Out/sort.txt 
    sudo gedit /home/hduser/Out/sort.txt 

.PHONY: exec run 

回答

1

只要把run規則先在all之前。

您也可以重寫all規則並將其重命名,以減少冗餘和正確處理的依賴關係:

run: a.out 
    blah blah blah 

a.out: rdata.c 
    -sudo rm [email protected] 
    -gcc $< -o [email protected] 

(我不知道足夠的關於Java和Hadoop來判斷run規則。)

+0

嘿。謝謝。有用。我想知道更多關於在這裏發生的冗餘。也是它只運行Makefile中定義的第一個規則? –

+1

@RED當沒有參數運行時,使用默認目標。在沒有被告知任何特殊的情況下,默認目標是makefile中的第一個目標make。 –

+1

@RED:你也可以把'run'的規則放在原來的地方,並把'.DEFAULT_GOAL:= run'放在makefile的某處,但我想給出最簡單的答案。 – Beta