61

GCC プログラム全体の最適化を試してみたい。そのためには、すべての C ファイルを一度にコンパイラ フロントエンドに渡す必要があります。ただし、私はビルド プロセスを自動化するためにメイクファイルを使用しており、メイクファイルの魔法に関しては専門家ではありません。

GCC への呼び出しを 1 回だけ使用してコンパイル (場合によってはリンクも) したい場合、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)
4

3 に答える 3

63
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)
于 2008-10-04T15:00:58.617 に答える
53
SRCS=$(wildcard *.c)

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

all: $(OBJS)
于 2010-11-02T03:47:52.503 に答える
2

ビッグバン ルールを優先して、サフィックス ルール (%.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 に適切なフラグを追加してください。

これらのフラグのドキュメントを読んでみると、リンク時の最適化に関するメモも見られます。それらも調査する必要があります。

于 2014-02-03T13:15:49.400 に答える