我真的是初学者,我想构建一个makefile,以便稍后运行一个程序。 例如终端输入:make loop 6
loop: $(BIN)
terminalinput= $1 #e.g. the value 6
count=0
while [ $count -lt $terminalinput ]; do
./$(BIN) \
count=$((count+1))
done
我不知道如何获取终端输入并在while循环中构建它。我使用Ubuntu,我希望somebode可以帮助我。
提前谢谢
答案 0 :(得分:1)
make
个变量,例如make loop LOOPS=10
。ifdef
中使用Makefile
来确定是否已定义变量,例如ifdef LOOPS
loop: prog
for ((i=1; i <= ${LOOPS}; ++i)) do ./prog; done
.PHONY: loop
endif
prog:
# Commands for making prog
总之,这可能足以满足您的需求。
以上内容应中止并显示错误消息
(关于不知道如何制作loop
)
如果忘记在命令行中定义LOOPS
。
相反,如果您想要LOOPS
的默认值,
只需在Makefile中定义它。那么就不需要ifdef
:
LOOPS = 10
loop: prog
for ((i=1; i <= ${LOOPS}; ++i)) do ./prog; done
.PHONY: loop
prog:
# Commands for making prog
现在,make loop
运行prog
10次,但您仍然可以覆盖它
使用例如make loop LOOPS=3
。
答案 1 :(得分:1)
我使用gmake,只能改变ccorn的答案(再次感谢你)。因为我必须在makefile的第一行写SHELL:= / bin / bash。
现在,当我在终端中编写make loop l=5
时,程序运行5次。当我只写make loop
时,程序运行10次(默认值)。
这是我的小test-makefile:
SHELL := /bin/bash
BIN = stack
SRC = \
stacktest.c \
stack.c \
CC = gcc
CFLAGS = -g -Wall -Wextra -O3 -std=c99 -lm
OBJS = $(SRC:%.c=%.c)
all: $(BIN)
$(BIN): $(OBJS)
val: $(BIN)
valgrind ./$(BIN)
run: $(BIN)
./$(BIN)
l = 10
loop: $(BIN)
for ((i=1; i <= ${l}; ++i)) do ./$(BIN); done
我没有包含虚假的内容,因为我必须首先阅读。
谢谢你的帮助! :)