使用makefile运行带有输入的可执行文件

时间:2016-11-22 15:27:50

标签: makefile

我有以下makefile:

CC=g++
CFLAGS=-I.
tiling_file=blocking.cpp
sequential_file=sequential.cpp
n1 = 100
n2=7 
n3=4

all: tiling sequential run
tiling:
    $(CC) $(tiling_file) -fopenmp -o block

sequential: 
    $(CC) $(sequential_file) -fopenmp -o seq

run:
    ./block $(n1) $(n2) $(n3)

块可执行文件接受三个输入(由n1,n2,n3指定)。但是当我执行make时,我得到以下输出

g++ blocking.cpp -fopenmp -o block
g++ sequential.cpp -fopenmp -o seq
./block 100 7 4 

可执行文件不接受输入,除非我再次键入100 7 4并按Enter键。 我该怎么办呢?

1 个答案:

答案 0 :(得分:2)

  

可执行文件不接受输入,除非我再次键入100 7 4并按Enter键。我该怎么办呢?

该可执行文件可能需要标准输入中的数据而不是命令行参数:

run:
    echo "$(n1) $(n2) $(n3)" | ./block 

我通常会有以下规则来运行可执行文件:

run_% : %
    echo "${$*.stdin}" | ./$< ${$*.args}
.PHONY: run_%

然后我会定义一个可执行文件:

mytest : # something that builds mytest executable
mytest.stdin := "this goes into the standard input of mytest"
mytest.args := --verbose --dry-run

然后调用make:

make run_mytest

另一点是你的食谱必须生成他们承诺生成的文件。目前,它承诺构建一个名为tiling的文件,但建立一个名为block的文件。

修正:

tiling:
    $(CC) $(tiling_file) -fopenmp -o $@

sequential: 
    $(CC) $(sequential_file) -fopenmp -o $@

上面的$@代表目标名称,tilingsequential