58 votes

makefiles - compile tous les fichiers c à la fois

Je souhaite expérimenter avec les optimisations du programme entier de GCC. Pour ce faire, je dois passer tous les fichiers C à la fois à l'interface du compilateur. Cependant, j'utilise des makefiles pour automatiser mon processus de génération et je ne suis pas un expert en magie des makefiles.

Comment dois-je modifier le makefile si je veux compiler (peut-être même créer un lien) en utilisant un seul appel à GCC?

Pour référence - mon fichier make ressemble à ceci:

 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)
 

59voto

Alex B Points 34304
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)

44voto

Manas Points 129
SRCS=$(wildcard *.c)

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

all: $(OBJS)

1voto

James McPherson Points 565

Vous devez supprimer votre règle de suffixe (% .o:% .c) en faveur d'une règle du Big Bang. Quelque chose comme ça:

 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)
 

Si vous souhaitez expérimenter l'optimisation de l'ensemble du programme de GCC, veillez à ajouter l'indicateur approprié à CFLAGS, ci-dessus.

En parcourant la documentation de ces drapeaux, je vois aussi des notes sur l'optimisation du temps de liaison; vous devriez enquêter sur ceux aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X