Я пытаюсь сделать один файл makefile, который скомпилирует два разных набора файлов. Это возможно?makefile целевые файлы
То, что я пытался до сих пор:
target1: OBJ = foo1.o foo2.o
target1: application
target2: OBJ = foo3.o foo4.o
target2: application
application: $(OBJ)
$(LD) $(OBJ)
Что происходит, что LD
вызывается с правильными параметрами, но сделать никогда не проверяет зависимости поэтому неявные правила, которые компилируются .c файлы .o никогда выполненный таким образом, что компоновщик не работает:
ld: cannot find foo1.o: No such file or directory
ld: cannot find foo2.o: No such file or directory
Каков правильный путь?
Вы были правы. Исправлен минимальный код, вызывающий ошибку – felknight
целевые переменные доступны в * рецепте * и в других целевых назначениях для одной и той же цели. Но они недоступны в предварительных требованиях (поскольку они могут зависеть от автоматических переменных, которые не имеют значения до тех пор, пока не будут определены предварительные условия). Возможно, есть способ сделать это, но похоже, что традиционный явный предварительный стиль проще. То есть, если вы удаляете 'OBJ =' из 'target1: OBJ = foo1.o foo2.o', вы получаете одинаково поддерживаемую' target1: foo1.o foo2.o'. :) – rici
@EtanReisner: Почему вы думаете, что у него есть предпосылки? Я проверил это с make-файлом: 'target: prereq = foo'' target: $ (prereq) '' \ techo $^'. Если целевая переменная была доступна в предварительных условиях, я ожидал бы увидеть «foo». Но нет. (Рецепт для цели без предварительных условий выполняется безоговорочно, ¿нет?) – rici