Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用makefile运行程序数次_Makefile_While Loop - Fatal编程技术网

使用makefile运行程序数次

使用makefile运行程序数次,makefile,while-loop,Makefile,While Loop,我真的是一个初学者,我想建立一个makefile,这样我以后可以运行一个程序多次。 e、 g.终端输入:闭合回路6 loop: $(BIN) terminalinput= $1 #e.g. the value 6 count=0 while [ $count -lt $terminalinput ]; do ./$(BIN) \ count=$((count+1)) done 我不知道如何获取终端输入并在while循环中构建它。我

我真的是一个初学者,我想建立一个makefile,这样我以后可以运行一个程序多次。 e、 g.终端输入:闭合回路6

loop: $(BIN)
    terminalinput= $1 #e.g. the value 6
    count=0
    while [ $count -lt $terminalinput ]; do
        ./$(BIN) \
        count=$((count+1))
    done
我不知道如何获取终端输入并在while循环中构建它。我使用Ubuntu,希望有人能帮我

先谢谢你

  • 您可以通过命令行传递
    make
    变量,例如
    make loop LOOPS=10
  • 您可以在
    Makefile
    中使用
    ifdef
    来确定变量是否已定义,例如:
  • ifdef循环
    循环:程序
    
    对于((i=1;i我使用gmake,只需对ccorn的答案做一点修改(再次感谢您),因为我必须在makefile的第一行中编写SHELL:=/bin/bash

    现在,当我在终端中写入
    makeloop l=5
    时,程序运行5次。当我只写入
    makeloop
    时,程序运行10次(默认值)

    这是我的小测试生成文件:

    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
    
    SHELL:=/bin/bash
    BIN=堆栈
    SRC=\
    stacktest.c\
    堆栈.c\
    CC=gcc
    CFLAGS=-g-壁-Wextra-O3-std=c99-lm
    OBJS=$(SRC:%.c=%.c)
    全部:$(BIN)
    $(BIN):$(OBJS)
    val:$(BIN)
    valgrind./$(箱)
    运行:$(BIN)
    ./$(BIN)
    l=10
    循环:$(BIN)
    
    对于((i=1;i)你为什么要用make做这件事?我想创建一个makefile模板,用于我的C程序。这样我就可以写“make-run=compile-and-run-the-program”,“make-val=compile-and-run-valgrind”,“make-loop 5=compile-and-run-the-program 5次”等等。我想用一个makefile来试试。谢谢你的帮助,我只修复了一个东西,它就成功了。真的很好的社区!@wurya:“事情”可能是运行
    prog
    应该使用一个显式路径,比如
    /prog
    。修复了。是的,
    用于(…)
    语法是特定于bash的
    bash
    。问题中的
    $(…)
    构造也是如此,因此至少答案仍在该上下文中。