2016-07-31 7 views
2

私は初心者です。後でmakefileをビルドして、後でプログラムを何度も実行することができます。例: ターミナル入力:ループを作る6makefileで数回プログラムを実行する

loop: $(BIN) 
    terminalinput= $1 #e.g. the value 6 
    count=0 
    while [ $count -lt $terminalinput ]; do 
     ./$(BIN) \ 
     count=$((count+1)) 
    done 

私はターミナル入力を取得してwhileループでビルドする方法がわかりません。私はUbuntuを使い、somebodeが私を助けてくれることを願っています。

あなたは、例えば、コマンドラインを介してmake変数を渡すことができ、事前

+0

なぜあなたはmakeでこれをやろうとしていますか? – user657267

+0

私のCプログラムで使用できるmakefileテンプレートを作成したいと思います。 "make run =コンパイルしてプログラムを実行する"、 "make val =コンパイルしてvalgrindを実行する"、 "ループ5をコンパイルしてプログラムを5回実行する"などと書くことができます。 – wurya

答えて

1
  1. でお願いしますmake loop LOOPS=10
  2. Makefileifdefを使用して、変数が定義されているかどうかを判断することができます。
ifdef LOOPS 
loop: prog 
     for ((i=1; i <= ${LOOPS}; ++i)) do ./prog; done 

.PHONY: loop 
endif 

prog: 
     # Commands for making prog 

一緒に、これはあなたが望むものに十分に近い来るかもしれません。

コマンドラインでLOOPSを定義するのを忘れた場合上記(loopを作成する方法を知らないことについて)エラーメッセージ を中止すべきです。 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

+0

ご協力いただきありがとうございます、私はものを修正し、それは働いた。本当に素晴らしいコミュニティ! – wurya

+0

@ wurya:おそらく 'prog'を実行していることは、'。/ prog'のような明示的なパスで行うべきことでしょう。一定。 – ccorn

+0

そして、 'for((...))'構文は 'bash'固有のものです。質問の '$((...)) '構造体と同じです。したがって少なくとも答えはその文脈の中にとどまります。 – ccorn

1

私はgmakeを使用していますが、少しだけccornの回答を変更する必要があります(もう一度ありがとう)。私はmakefileの最初の行にSHELL:=/bin/bashと書かなければならなかったからです。

私の端末にmake loop l=5と書くと、プログラムは5回実行されます。 make loopと書くだけで、プログラムは10回(デフォルト値)実行されます。

これは私の小さなテストの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 

私は私が最初にそれについてまで読まなければならないので、偽含まれていません。

ありがとうございました! :)

関連する問題