makefile基础

阅读量 ,评论量

文件基本格式

target:prerequisites
[tab] commands

include filename命令可将其他文件包含进来,若在该命令行首添加-, 表示忽略可能会出现的文件包含错误。

变量

自动变量

多行变量

define var
    commands
endef

主要用于定义命令包,每行命令都在单独的进程中执行,故展开时有可能导致脚本错误。

静态模式:以%通配

objs=main.o library.o
all:$(objs)
    $(cc) -o a $(objs)
$(objs):%.o:%.c
    $(CC) -c $< -o $@

条件判断

基本格式

conditional-directive
    commands
else
    commands
endif

可用的条件判断

循环

可使用shell循环

objs = file1 file2
rulefor:
    for filename in `echo $(objs)`; \
    do \
        touch $$filename; \
    done

\保证了多行命令在同一进程下执行,因命令是在shell下执行的, 故filename为shell变量,自然用$$引用。

字符串替换函数

示例

comma := ,
empty := 
space := $(empty) $(empty)
str1 := a b c
str2 := $(subst $(space),$(comma),$(str))
result:
    @echo $(str1)
    @echo $(str2)
    @echo "done"