Скомпилируйте три исполняемых файла в один make-файл - PullRequest
0 голосов
/ 25 июня 2011

У меня есть следующий make-файл:

prog1: prog1.c

       gcc -o prog1.exe prog1.c

prog2: prog2.c

       gcc -o prog2.exe prog2.c

prog3: prog3.c

       gcc -o prog3.exe prog3.c

Это демонстрационные файлы в демонстрационном каталоге, которые я хочу скомпилировать в один make-файл.

Как я могу использовать шаблоны, чтобы сократить это?

например, в этом направлении:

    progs= prog1 prog2 prog3

    all: ($progs)

%.exe: %.c

      gcc .....

Ответы [ 3 ]

3 голосов
/ 25 июня 2011

Make знает, как создавать исполняемые файлы из исходных файлов. Вы должны быть в состоянии написать весь make-файл как

progs := prog1 prog2 prog3
all: $(progs)

Если вам нужно указать, какой компилятор C использовать, просто добавьте строку, читающую

CC := gcc

Если вам необходимо передать дополнительные флаги компилятору, поместите их в переменную CFLAGS.

РЕДАКТИРОВАТЬ: Чтобы удовлетворить потребность в файле с именем foo.exe, вы можете переместить его после того, как он построен:

%.exe: %
            mv $< $@

Или, если вы знаете, что используете цепочку инструментов GNU, вы можете указать компоновщику дать вам этот префикс:

LDFLAGS := --force-exe-suffix

К сожалению, GNU Make, похоже, не предлагает стандартную переменную для суффикса / расширения для встроенных исполняемых файлов

1 голос
/ 25 июня 2011

Примерно так должно работать:

%.exe: %.c
    gcc $< -o $@
0 голосов
/ 25 июня 2011

Большое спасибо за ваши сообщения! Я обнаружил, что должен добавить правило, чтобы оно работало. Также я добавил touch, чтобы иметь возможность повторять make-файл.

progs = prog1 prog2 prog3

all: run_touch $(progs)

run_touch:

    touch *.cpp

%:%.cpp

    $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...