Я пытаюсь написать make-файл для компиляции 87 файлов со следующими именами: file1.c, file2.c file3.c .... file87.cнаписание Makefile компилировать несколько бинарных файлов
я пытаюсь для компиляции их в отдельные двоичные файлы с именами: file1, file2, file3 .... file87
В Makefile Мне нужно определить следующие переменные для каждого из них. Это то, что я изначально.
FILE1 = file1
$(FILE1)_SRC := \
mydir/file1.c \
mydir/another.c
$(FILE1)_CFLAGS := `pkg-config --cflags glib-2.0`
$(FILE1)_LDFLAGS := -L. `pkg-config --libs glib-2.0`
FILE2 = file2
$(FILE2)_SRC := \
mydir/file2.c \
mydir/another.c
$(FILE2)_CFLAGS := `pkg-config --cflags glib-2.0`
$(FILE2)_LDFLAGS := -L. `pkg-config --libs glib-2.0`
Также в конце Makefile мне нужно хранить имена исполняемых файлов
binaries = $(FILE1) $(FILE2) ...... $(FILE87)
Я разведанных петли и определить директиву сделать, но я не могу понять, как я могу сделать это аккуратно в не громоздкий способ. Обратите внимание, что CFLAGS и LDFLAGS одинаковы для всех из них.
Любые входы или альтернативные подходы к написанию файла Makefile очень приветствуются.
Я написал это на основе ответа Селдона ниже, но это дает ошибку:
SRCS = $(wildcard mydir/*.c)
TGTS = $(SRCS:%.c=%)
CFLAGS = $$(pkg-config --cflags glib-2.0)
LDFLAGS = -L.
LDLIBS = $$(pkg-config --libs glib-2.0)
all: $(TGTS)
@echo $(SRCS)
@echo $(TGTS)
$(TGTS) : % : %.o another.o
#clean:
# rm -f $(TGTS) *.o
#.PHONY: all clean
$ make
cc $(pkg-config --cflags glib-2.0) -c -o mydir/another.o mydir/another.c
make: *** No rule to make target `another.o', needed by `mydir/another'. Stop.
Источник:
another.c
# include <stdio.h>
# include <stdlib.h>
void print_string(const char * file_name, int lineno, const char * func_name) {
printf("%s %d %s\n", file_name, lineno, func_name);
}
file01.c
int main() {
print_string(__FILE__, __LINE__, __func__);
}
Любая помощь приветствуется.
Что вам нужно 'binaries' для? – Beta
@ Бета, мне нужно их построить. Благодарю. – abc
Прочтите ошибку! Это _make_ жалуется, что вы не сказали, как построить 'another.o'. Затем посмотрите на Makefile. Единственная строка, в которой отображается 'another.o', - это статическое правило шаблона' $ (TGTS):%:% .o another.o'. Если каждая цель в '$ {TGTS}' не зависит от 'another.o', то вытащите ее! (просто зависимость, а не вся строка!) – bobbogo