2016-07-31 2 views
2

Я действительно начинающий, и я хочу создать make-файл, чтобы впоследствии запустить программу несколько раз. , например. Входной разъем: сделайте петлю 6запускать программу несколько раз с make-файлом

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

Я не знаю, как получить ввод с терминала и построить его в то время цикла. Я использую Ubuntu, и я надеюсь, что somebode может мне помочь.

спасибо заранее

+0

Почему вы пытаетесь сделать это с помощью make? – user657267

+0

Я хочу создать шаблон makefile, который я могу использовать для своих программ на C. Поэтому я могу написать «make run = компилировать и запускать программу», «make val = компилировать и запускать valgrind», «make loop 5 = компилировать и запускать программу 5 раз» и т. Д. Я хочу попробовать это с помощью makefile. – wurya

ответ

1
  1. Вы можете передать make переменные с помощью командной строки, например make loop LOOPS=10.
  2. Вы можете использовать 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.

+0

Благодарим вас за помощь, я только зафиксировал вещь, и она сработала. Действительно отличное сообщество! – wurya

+0

@wurya: «Вещь», вероятно, заключается в том, что запуск «prog» должен выполняться с явным путем, например './Prog'. Исправлена. – ccorn

+0

И да, синтаксис 'for ((...))' является 'bash'-specific. То же самое для '$ ((...))' конструкции в вопросе, поэтому по крайней мере ответ остается в этом контексте. – ccorn

1

Я использую gmake и должен только немного изменить ответ ccorn (спасибо вам снова). Потому что мне пришлось написать SHELL: =/bin/bash в первой строке моего файла makefile.

Теперь, когда я пишу 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 

Я не включают в себя фальшивым, потому что я должен сначала прочитать об этом.

Спасибо за помощь! :)

Смежные вопросы