如何在makefile中编写通用命令?

时间:2014-02-18 00:26:51

标签: c gcc 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。有没有办法只输入一次模块的名称(好像它是一个参数),让makefile以相同的方式构建每个模块?

1 个答案:

答案 0 :(得分:0)

如果您将LIBS更改为LDLIBS,则可以在此处编写整个makefile:

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 $@ $(CFLAGS) $(LDLIBS)

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