使用makefile

时间:2016-07-31 00:16:48

标签: makefile while-loop

我真的是初学者,我想构建一个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可以帮助我。

提前谢谢

2 个答案:

答案 0 :(得分:1)

  1. 您可以通过命令行传递make个变量,例如make loop LOOPS=10
  2. 您可以在ifdef中使用Makefile来确定是否已定义变量,例如
  3. 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

我没有包含虚假的内容,因为我必须首先阅读。

谢谢你的帮助! :)