INCLUDE+=-I./Include -I/usr/local/include/libxml2 -I/usr/local/ssl/include -I/usr/local/include TARGET=Agent LIB=-lstdc++ -lrt -lpthread -lxml2 OBJS:=$(patsubst %.cpp,%.o,$(wildcard *.cpp)) $(TARGET):${OBJS} $(CC) $^ $(LIB) -g -o [email protected] .cpp.o: $(CC) $(FLAGS) $(INCLUDE) -g -o [email protected] -c $< clean: rm -rf $(TARGET) rm -f $(OBJS) #########################################
rm命令:
-f 忽略不存在的文件,从不给出提示。
-r, -R 指示rm将参数中列出的全部目录和子目录均递归地删除。
一般我们可以使用“$(wildcard *.c)”来获取工作目录下的所有的.c文件列表。复杂一些用法;可以使用“$(patsubst %.c,%.o,$(wildcard *.c))”,首先使用“wildcard”函数获取工作目录下的.c文件列表;之后将列表中所有文件名的后缀.c替换为.o。这样我们就可以得到在当前目录可生成的.o文件列表。
patsubst 应该是 makefile 里的一个函数 (如果你问的 patsubst 是其他语言里的,那就别看下面的了)
比方说你在 makefile 里定义了一个变量,内容是一堆 .c 文件的的名字,如
SRC = aaa.c bbb.c my.c his.c
你可以用 patsubst 根据 某种模式,将这些名字改成另外的,比如将这些 .c 文件的名字变成 .s 为后缀的名字:
NEW = $(patsubst "%.c", "%.s", ${SRC})
这样 NEW 这个变量中,就记录了 aaa.s bbb.s my.s his.s 这些后缀名为 .s 的文件。 上面命令中的模式字符串就是 "%.c" 或 "%.s", 而其中的 "%" 就是特殊的匹配字符,对于 aaa.c 这个字符串来说, "%.c" 中的% 就匹配 aaa。 这个很像我们在 bash 或者 dos 下用 *.c 匹配所有 .c 文件时候的那个 *
makefile一个模板
时间: 2024-10-14 08:17:21