Подтвердить что ты не робот

Makefiles - скомпилировать все файлы c сразу

Я хочу экспериментировать с оптимизацией всей программы GCC. Для этого мне нужно передать все C файлы сразу в интерфейс компилятора. Однако я использую make файлы для автоматизации процесса сборки, и я не эксперт, когда дело доходит до make-магии.

Как мне изменить make файл, если я хочу скомпилировать (возможно, даже ссылку), используя только один вызов GCC?

Для справки - мой make файл выглядит так:

LIBS  = -lkernel32 -luser32 -lgdi32 -lopengl32
CFLAGS = -Wall

OBJ = 64bitmath.o    \
      monotone.o     \
      node_sort.o    \
      planesweep.o   \
      triangulate.o  \
      prim_combine.o \
      welding.o      \
      test.o         \
      main.o

%.o : %.c
    gcc -c $(CFLAGS) $< -o [email protected]

test: $(OBJ)
    gcc -o [email protected] $^ $(CFLAGS) $(LIBS)
4b9b3361

Ответ 1

LIBS  = -lkernel32 -luser32 -lgdi32 -lopengl32
CFLAGS = -Wall

# Should be equivalent to your list of C files, if you don't build selectively
SRC=$(wildcard *.c)

test: $(SRC)
    gcc -o [email protected] $^ $(CFLAGS) $(LIBS)

Ответ 2

SRCS=$(wildcard *.c)

OBJS=$(SRCS:.c=.o)

all: $(OBJS)

Ответ 3

Вам нужно вынуть правило суффикса (%.o:%.c) в пользу правила большого взрыва. Что-то вроде этого:

LIBS  = -lkernel32 -luser32 -lgdi32 -lopengl32
CFLAGS = -Wall

OBJ = 64bitmath.o    \
      monotone.o     \
      node_sort.o    \
      planesweep.o   \
      triangulate.o  \
      prim_combine.o \
      welding.o      \
      test.o         \
      main.o

SRCS = $(OBJ:%.o=%.c)

test: $(SRCS)
    gcc -o [email protected]  $(CFLAGS) $(LIBS) $(SRCS)

Если вы собираетесь экспериментировать с оптимизацией всей программы GCC, сделайте убедитесь, что вы добавили соответствующий флаг в CFLAGS, выше.

При чтении документов для этих флагов я вижу заметки о времени ссылки оптимизация; вы также должны исследовать их.