我写了一个简单的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
文件都会被编译。
答案 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
目标指定default
,all
和clean
不是真实文件,而是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