2014-02-18 1378 views
1

这是我目前的版本是什么样子:如何在makefile中编写通用命令?

CC = gcc 
CFLAGS = `sdl-config --cflags` 
LIBS = `sdl-config --libs` -lSDL_ttf 

program: uprising 

uprising: main.o init.o display.o move.o global.o control.o battle.o 
    $(CC) main.o init.o display.o move.o global.o control.o battle.o -o uprising $(CFLAGS) $(LIBS) 

global.o: global.c 
    $(CC) -c global.c -o global.o $(CFLAGS) 

battle.o: battle.c 
    $(CC) -c battle.c -o battle.o $(CFLAGS) 

main.o: main.c 
    $(CC) -c main.c -o main.o $(CFLAGS) 

init.o: init.c 
    $(CC) -c init.c -o init.o $(CFLAGS) 

display.o: display.c 
    $(CC) -c display.c -o display.o $(CFLAGS) 

move.o: move.c 
    $(CC) -c move.c -o move.o $(CFLAGS) 

control.o: control.c 
    $(CC) -c control.c -o control.o $(CFLAGS) 
clean: 
    rm -f *~ *# uprising init.o main.o display.o move.o global.o control.o 

你看,每个模块都被以同样的方式进行编译。在向项目添加新模块时,我已经厌倦了编辑此生成文件。有没有什么办法只输入一次模块的名字(就好像它是一个参数),让makefile以同样的方式构建每个模块?

回答

0

如果更改LIBSLDLIBS,你可以在短短这个写入整个生成文件:

CC = gcc 
CFLAGS = `sdl-config --cflags` 
LDLIBS = `sdl-config --libs` -lSDL_ttf 

program: uprising 

uprising: main.o init.o display.o move.o global.o control.o battle.o 
     $(CC) $^ -o [email protected] $(CFLAGS) $(LDLIBS) 

clean: 
     rm -f *~ *# uprising *.o 
+0

这是惊人的,谢谢! – Diaz