Предположив MyLib.h
является зависимость для обоих файлов C, вы должны иметь что-то вроде этого:
# Variables
CC := gcc
CFLAGS := -O
# Link executable
Tester: MyLib.o Tester.o
${CC} MyLib.o Tester.o ${LDFLAGS} -o Tester
# Compile object files
MyLib.o: MyLib.c MyLib.h
${CC} ${CFLAGS} -c -o MyLib.o MyLib.c
Tester.o: Tester.c MyLib.h
${CC} ${CFLAGS} -c -o Tester.o Tester.c
и, как только вы получили повесить, как все работает, вы можете использовать автоматические переменные в качестве второго шага в деле сокращения дублирования кода:
# Variables
CC := gcc
CFLAGS := -O
# Link executable
Tester: MyLib.o Tester.o
${CC} $^ ${LDFLAGS} -o [email protected]
# Compile object files
MyLib.o: MyLib.c MyLib.h
${CC} ${CFLAGS} -c -o [email protected] $<
Tester.o: Tester.c MyLib.h
${CC} ${CFLAGS} -c -o [email protected] $<
где [email protected]
это заменяется именем цели для текущего правила, $<
заменяется первым (то есть крайний слева) зависимости, $^
заменяется полным списком зависимостей.
В приведенном выше примере биты после :
являются зависимостями, то есть цель слева от :
будет сделана/переделана, если какая-либо из зависимостей более поздняя, чем цель. Для каждой из зависимостей make
будет искать цель для нее. Итак, для первого раздела он видит, что MyLib.o
и Tester.o
являются зависимостями для вашего полного исполняемого файла, и он ищет цели для них, которые предоставляются. Находящие цели, они строят их (если необходимо), а затем продолжают строить Tester
.
Обратите внимание, что CFLAGS
обычно представляет компиляции флаги, так что вам не нужно, чтобы передать их, когда вы только связывающую поскольку ни компиляции не делается в этой точке.
Кроме того, если вы боретесь с такого рода вещи, а затем упростить, и удалить все дополнительные цели (например, clean
и install
и all
) до тех пор, пока у вас есть навык того, что происходит.
Спасибо за проголосовать :( –
Какова цель?Создать библиотеку, а затем связать тестер с этим? Или просто создайте один бинарный файл с помощью Mylib. [Ch] и Tester.c? –
В основном это будет делать: gcc MyLib.c Tester.c -o Тестер –