我有以下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键。 我该怎么办呢?
答案 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 $@
上面的$@
代表目标名称,tiling
和sequential
。