makefile, правило для нескольких входов - PullRequest
1 голос
/ 30 марта 2012
У

есть один трудоемкий шаг, который сглаживает кучу файлов.

В основном я хотел бы, чтобы это был правильный синтаксис

%.out: %.input1 %.input2
    merge $<1 $<2 $@

doit: project.out
    # project.out merged

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

.SULFFIX: .in.out
.in.out:
    dosomething $< $@
doit: project.out

GNU Make 3.81

Я нашел несколько дискуссий о том, как иметь правило с несколькими выходами, но ни одного с несколькими входами.

1 Ответ

2 голосов
/ 30 марта 2012
%.out: %.input1 %.input2
    merge $<1 $<2 $@

В правилах makefile нет автоматических переменных $1 и $2, однако есть $^, который является списком всех предварительных условий.Поскольку правило имеет только две предпосылки, оно расширяется до %.input1 %.input2 или, точнее, до $*.input1 $*.input2.Следовательно:

%.out: %.input1 %.input2
    merge $^ $@

должно быть достаточно.

.SULFFIXES, IMO, не очень полезен, поскольку в нем используются неявные определения правил, которые нельзя увидеть и изменить.

[обновление]

Относительно цели doit, чтобы предотвратить ее выполнение каждый раз, когда вам может потребоваться изменить команды правила на:

doit: project.out
    # project.out merged
    touch $@
...