万能C语言makefile模板

万能makefile编译模板(带版本号)


#项目路径
INC_DIR = ../inc
LIB_DIR = ../lib
TAR_DIR = ../tar/

#目标
TARGET = mytar

#头文件
INCLUDE = -I$(INC_DIR) -I./ -I$(LIB_DIR)

#库 .a表示自己编译的库 -l后面的表示使用的其他库
LDFLAGS = $(LIB_DIR)/xxx.a  
LIBS =-lm -lpthread 

#编译器及编译选项 
CC = gcc
CSTRIP = strip
CFLAGS = -O2 -Wall -g -fpic

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

#版本信息
VERSION_STRING := "4.0.1"
DATE_STRING := `date "+20%y.%m.%d %k:%M:%S"`
DESC := "名字描述"
EXT := " lilei" #扩展字段一般填入作者等其他不需要显示的信息如作者

RM = rm -f

$(TAR_DIR)/$(TARGET):auto_version.h $(OBJS)
	$(CC) -o $@ $^ $(INCLUDE) $(CFLAGS) $(LDFLAGS) $(LIBS) 
$(OBJS):%.o:%.c
	$(CC) -c $(INCLUDE) $(LIBS) $(CFLAGS) $< -o $@

#用来生成头文件 然后需要获取版本信息时直接获取宏定义对应的字符串就好了
auto_version.h:
	`touch auto_version.h`
	@echo "#define VER_AUTO 1" > auto_version.h                         	# > :覆盖文本原来内容
	@echo "#define V_NAME \"$(TARGET)\"" >> auto_version.h     				# >> :追加内容到文本末尾
	@echo "#define V_VERSION \"$(VERSION_STRING)\"" >> auto_version.h     	# >> :追加内容到文本末尾
	@echo "#define V_DATE \"$(DATE_STRING)\""	>> auto_version.h           # >> :追加内容到文本末尾
	@echo "#define V_EXT \"$(EXT)\""	>> auto_version.h           		# >> :追加内容到文本末尾
	@echo "#define V_DESC \"$(DESC)\""	>> auto_version.h           		# >> :追加内容到文本末尾

strip:
	-$(CSTRIP) $(CENTER_DIR)/$(TARGET)
clean:
	-$(RM) $(TARGET) $(OBJS) auto_version.h

万能makefile编译模板(不带版本号)

#项目路径
INC_DIR = ../inc
LIB_DIR = ../lib
TAR_DIR = ../tar/

#目标
TARGET = mytar

#头文件
INCLUDE = -I$(INC_DIR) -I./ -I$(LIB_DIR)

#库 .a表示自己编译的库 -l后面的表示使用的其他库
LDFLAGS = $(LIB_DIR)/xxx.a  
LIBS =-lm -lpthread 

#编译器及编译选项 
CC = gcc
CSTRIP = strip
CFLAGS = -O2 -Wall -g -fpic

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

RM = rm -f

$(TAR_DIR)/$(TARGET):$(OBJS)
	$(CC) -o $@ $^ $(INCLUDE) $(CFLAGS) $(LDFLAGS) $(LIBS) 
$(OBJS):%.o:%.c
	$(CC) -c $(INCLUDE) $(LIBS) $(CFLAGS) $< -o $@

strip:
	-$(CSTRIP) $(CENTER_DIR)/$(TARGET)
clean:
	-$(RM) $(TARGET) $(OBJS)

编译库万能Makefile

######################################################################
# 驱动库Makefile
######################################################################

#头文件
INCLUDE = -I../inc -I./ -I../so_inc

#库
LDFLAGS = -L../lib
LIBS = 

#编译器及编译选项
CC = gcc
#CC = arm-linux-gcc
#AR = arm-linux-ar
CFLAGS = -Wall -O -c -fpic

#编译
.PHONY : all clean

all : $(patsubst %.c,%.a,$(wildcard *.c))

%.a : %.c
	$(CC) $(CFLAGS) $< $(INCLUDE) $(LDFLAGS) $(LIBS)
	$(AR) -rv $@ $(subst .c,.o,$<)

clean :
	rm -rf *.o *.a
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Makefile 是用于自动化构建和管理 C 语言项目的常用工具。它使用文本文件来定义编译、链接和其他构建任务的规则。下面是一个简单的示例,演示了如何编写一个基本的 Makefile。 假设我们有一个包含两个源文件 main.c 和 utils.c 的项目,我们希望将它们编译为可执行文件 main。首先,我们需要创建一个名为 Makefile 的文件,并在其中添加以下内容: ```makefile # 编译器选项 CC = gcc CFLAGS = -Wall -Wextra # 目标文件 OBJS = main.o utils.o # 生成可执行文件 main: $(OBJS) $(CC) $(CFLAGS) $(OBJS) -o main # 编译每个源文件 %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ # 清理生成的文件 clean: rm -f $(OBJS) main ``` 在上面的 Makefile 中,我们首先定义了编译器选项,CC 表示编译器,CFLAGS 表示编译选项。接下来,定义了目标文件 OBJS,该变量包含了所有的目标文件。 然后,定义了生成可执行文件 main 的规则。该规则指定了依赖关系,即 $(OBJS) 表示目标文件依赖于对应的源文件。在命令行中使用变量 $(CC) 和 $(CFLAGS) 来调用编译器进行链接操作。 接下来,定义了编译每个源文件的规则。使用通配符 % 表示匹配任意文件名,%.o 表示所有的目标文件依赖于对应的源文件。命令行中的 $< 代表依赖的源文件,$@ 代表目标文件。 最后,定义了一个用于清理生成文件的规则 clean。该规则使用 rm 命令删除所有目标文件和可执行文件。 要使用 Makefile,只需在命令行中运行 make 命令即可自动执行构建任务。例如,运行 make 命令将会编译源文件并生成可执行文件 main,运行 make clean 命令将会清理生成的文件。 这只是一个简单的示例,Makefile 还可以进行更多复杂的配置和任务设置,例如定义目录、库文件、头文件等。可以根据实际项目的需求对 Makefile 进行扩展和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值