【问题标题】:Generating a make file which runs executable生成运行可执行文件的 make 文件
【发布时间】:2014-06-10 07:10:10
【问题描述】:

在参考了 SO Run Executable from makefile 上的一些链接后,我尝试运行一个可执行文件。一切正常,只是我需要输入 "make run" 来执行所有命令。我想知道如何运行它而不必键入 run 并且只需 make 应该运行所有内容。到目前为止,make 命令只执行所有规则,而要运行另一部分,我必须使用 make run。我是新手。你能不能帮我稍微完善一下代码。任何帮助表示赞赏。

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

【问题讨论】:

    标签: makefile


    【解决方案1】:

    只需将run 规则放在首位,在all 之前。

    您还可以重写all 规则并重命名它,以减少冗余并正确处理依赖关系:

    run: a.out
        blah blah blah
    
    a.out: rdata.c
        -sudo rm $@
        -gcc $< -o $@
    

    (我对java和hadoop了解不够,无法判断run规则。)

    【讨论】:

    • 嘿。谢谢。有用。我想了解更多关于这里发生的冗余。是否也只运行 Makefile 中定义的第一条规则?
    • @RED 不带参数运行时,make 使用默认目标。没有被告知任何特殊情况,默认目标是 make 在 makefile 中找到的第一个目标。
    • @RED:您也可以将run 规则保留在原处,并将.DEFAULT_GOAL := run 放在makefile 中的某个位置,但我想给出最简单的答案。
    猜你喜欢
    • 1970-01-01
    • 2021-04-23
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多