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


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

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

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

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 53

3 ответа:

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)
SRCS=$(wildcard *.c)

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

all: $(OBJS)

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

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, выше.

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