makefiles - компилировать все c файлы одновременно - PullRequest
56 голосов
/ 04 октября 2008

Я хочу поэкспериментировать с оптимизацией всей программы 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 $@

test: $(OBJ)
    gcc -o $@ $^ $(CFLAGS) $(LIBS)

Ответы [ 3 ]

56 голосов
/ 04 октября 2008
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 $@ $^ $(CFLAGS) $(LIBS)
41 голосов
/ 02 ноября 2010
SRCS=$(wildcard *.c)

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

all: $(OBJS)
1 голос
/ 03 февраля 2014

Вам нужно вынести правило суффикса (% .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 $@  $(CFLAGS) $(LIBS) $(SRCS)

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...