2008-10-04 17 views
52

GCC tüm program optimizasyonlarını denemek istiyorum. Bunu yapmak için, tüm C-dosyalarını derleyici ön yüzüne bir kerede aktarmak zorundayım. Ancak, oluşturma sürecimi otomatikleştirmek için makefiles kullanıyorum ve makefile sihrine gelince uzman değilim.makefiles - tüm c dosyalarını bir kerede derleyin

GCC'ye yalnızca bir çağrı kullanarak derlemek (belki de bağlantı) istiyorsam makefile nasıl değiştirmeliyim? Başvuru için

- benim makefile şuna benzer: Büyük-patlama lehine: (% .c% .o)

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) 

cevap

54
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) 
+0

Neden joker karakter yerine gerçek C dosyaları listesi olmalı? – nornagon

+7

@nornagon,// ​​olmalıdır olmalıdır/ –

+10

@AlexB İngilizce konuşun. Bu ne anlama geliyor? – Overv

34
SRCS=$(wildcard *.c) 

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

all: $(OBJS) 
+0

Bu bana, '$ {CC} 'için çok sayıda çağrı yapması muhtemel olduğu için, asıl soruya bir cevap olarak değil, tam da istediğim buydu. Yapmaya çalıştığım şey için (bir dizi metin dosyası üzerinde yapmak istediğim bir dönüşüm yaptım, bu yüzden kendi ".SUFFIXES" satırını ekledim, ancak "$ (joker)" ve "$ (DEĞİŞKEN: .ext1 = .ext2) 'dönüşümü tam olarak aradığım şeydi.” Açıkça ya da aşağı oy vermemekle birlikte, bu sorunun * bir oylama hakkını haklı çıkardığını söyleyebilirim. – lindes

1

Sen eki kuralını dışarı almak gerekir kural. Böyle şey:

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) 

Eğer GCC en tam programı optimizasyonu denemeler yukarıdaki, CFLAGS uygun bayrağı ekleyin emin olmak için gidiyoruz.

Bu bayraklar için dokümanlar üzerinden okuma yaparken, bağlantı zamanı optimizasyonu ile ilgili notları da görüyorum; Bunları da araştırmalısın.

İlgili konular