Как сделать много похожих исполняемых файлов

0

У меня есть тестовый каталог с файлом makefile, например:

    EXECS = pgm1 pgm2 pgm3 pgm4 pgm5 ...

    OBJS = $(addsuffix .o, $(EXECS))

    all: $(EXECS)

    %.o : %.c
        $(CC) -c $< -o $@ $(IFLAGS)

    $(EXECS) : $(OBJS)
        $(CC) [email protected] -o $@ $(LFLAGS)

    pgm1 : pgm1.o
        $(CC) $< -o $@ $(LFLAGS)

    % : %.o
        $(CC) $< -o $@ $(LFLAGS)

pgm1: pgm1.o ссылки pgm1: pgm1.o работает, но я не хочу вводить его для каждой программы.

Правило %: %.o не работает (оно берет правило по умолчанию без флажков ссылок)

$(EXECS): $(OBJS) работает, но все исполняемые файлы связаны каждый раз, когда изменяется файл .o. Это не имеет большого значения, потому что программы небольшие, но было бы неплохо исправить.

Любые предложения, пожалуйста?

Позже...

Спасибо всем за ваши предложения. Решение - великолепно простая комбинация из них:

% : %.c
    $(CC) $(IFLAGS) $< -o $@ $(LFLAGS)
  • 0
    Вы можете попробовать это: stackoverflow.com/questions/1490949/…
  • 0
    неявное правило использует LDFLAGS, а не LFLAGS.
Теги:
makefile
gnu

2 ответа

0

Правило%:%. O должно работать, но я предполагаю, что make использует правило с более высоким приоритетом по умолчанию, поскольку

%:%.c
    $(CC) [email protected] -o $@

который компилирует и связывает непосредственно с C без ваших переменных.

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

%:%.c

без команды, см. http://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_10.html#SEC104

0

Правило шаблона не работает, поскольку вы уже определили явное правило для целей в $(EXECS): $(OBJS). Явные правила имеют приоритет над неявными правилами, такими как правила шаблонов. Удалите явные правила, и он будет работать так, как вы хотите:

EXECS = pgm1 pgm2 pgm3 pgm4 pgm5 ...

all: $(EXECS)

%.o : %.c
    $(CC) -c $< -o $@ $(IFLAGS)

% : %.o
    $(CC) $< -o $@ $(LFLAGS)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню