【问题标题】:How to write generic commands in makefile? [duplicate]如何在makefile中编写通用命令? [复制]
【发布时间】:2014-02-18 00:26:50
【问题描述】:

这是我当前版本的样子:

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 以相同的方式构建每个模块?

【问题讨论】:

    标签: c gcc makefile


    【解决方案1】:

    如果您将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
    

    【讨论】:

    • 太棒了,谢谢!
    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2012-04-18
    • 2020-07-16
    • 1970-01-01
    • 2017-01-21
    相关资源
    最近更新 更多