首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用makefile运行带有输入的可执行文件

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

Stack Overflow用户
提问于 2016-11-22 15:27:49
回答 1查看 1.7K关注 0票数 1

我有以下makefile:

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
g++ blocking.cpp -fopenmp -o block
g++ sequential.cpp -fopenmp -o seq
./block 100 7 4 

除非我再次键入100 7 4并按enter键,否则可执行文件不会接受输入。我怎么能运行它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-22 15:31:08

除非我再次键入100 7 4并按enter键,否则可执行文件不会接受输入。我怎么能运行它?

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

代码语言:javascript
复制
run:
    echo "$(n1) $(n2) $(n3)" | ./block 

对于运行可执行文件,我通常有以下规则:

代码语言:javascript
复制
run_% : %
    echo "${$*.stdin}" | ./$< ${$*.args}
.PHONY: run_%

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

代码语言:javascript
复制
mytest : # something that builds mytest executable
mytest.stdin := "this goes into the standard input of mytest"
mytest.args := --verbose --dry-run

然后像这样调用:

代码语言:javascript
复制
make run_mytest

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

修复:

代码语言:javascript
复制
tiling:
    $(CC) $(tiling_file) -fopenmp -o $@

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

在上面的$@中,tilingsequential相应地表示目标名称。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40745729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档