make中的简单模式规则

时间:2014-01-08 01:50:06

标签: bash makefile

我写了一个简单的make来测试模式规则。这是:

default:
    echo This is default target
%.o:%.c
    gcc -c $< -o $@
clean:
    rm -f *.o

我在pwd中有三个* .c文件。在make命令之后我有:

echo This is default target
This is default target

但我希望*.c中的任何pwd文件都会被编译。

2 个答案:

答案 0 :(得分:1)

makefile中的第一个目标是在您未指定特定目标名称时构建的目标。

makefile中,default是第一个,因此创建了它。

通常,您将创建一个目标all作为第一个目标,并列出应该通过一些或多或少的狡猾手段构建的程序。

.PHONY: default all clean

default:
    @echo "You must specify which program you want built (or specify all)"

SRCS = $(wildcard *.c)
PROGS = ${SRCS:.c=}

all: ${PROGS}

%.o:%.c
    gcc -c $< -o $@

clean:
    rm -f *.o

.PHONY目标指定defaultallclean不是真实文件,而是phony targets

我有一个包含许多源文件的目录,我有一个类似于上面的默认规则作为第一个目标,但我也有一个all目标,以便make all合理地工作。

我更喜欢在${...}变量周围使用make符号,make始终接受这些变量;许多人一直使用$(...)符号。

答案 1 :(得分:0)

我认为default是您的程序目标,但它没有链接任何对象?看我的makefile:

SRCS = $(wildcard *.c)
OBJS = $(patsubst %.c, %.o, $(SRCS))

default:
    @echo This is default target
Program: $(OBJS)
    gcc $^ -o $@
$(OBJS): $(SRCS)
    gcc -c $^
clean:
    rm -f $(OBJS) $(Program)

如果您输入make,只需echo This is default target,如果您想制作真正的目标,则可以输入make Program