小工程使用的Makefile模板,可交叉编译c,cpp文件

这是一个用于交叉编译C和C++程序的Makefile模板,配置了交叉编译工具链,能够自动查找源文件并进行编译。模板支持设置目标程序名称,包含头文件目录,并能正确链接库文件。编译选项包括-Wall、-rdynamic、-g、-MD、-O2、-static等,同时提供了编译和清理的目标规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小工程可以使用的Makefile模板,可交叉编译c,c++文件,从网上找来的只支持c文件的模板上更改了下。

# 交叉编译工具链,需要更改
CROSS_COMPILE= arm-linux-gnueabihf-
CC		= $(CROSS_COMPILE)gcc
CXX     = $(CROSS_COMPILE)g++
LINK    = $(CROSS_COMPILE)g++

AS      = as
LD      = ld
#CC      = gcc
CPP     = $(CC) -E
AR      = ar
NM      = nm

# 程序的默认名称,需要更改
TARGET = app_gateway

# 命令行中使用p=X或P=X修改默认程序名称
ifeq ("$(origin p)", "command line")
TARGET = $(p)
endif

ifeq ("$(origin P)", "command line")
TARGET = $(P)
endif

DIRS = $(shell find . -type d)
 
# 找出所有的.c .h .a .so文件及目录
CFILES_DIR 	= $(shell find . -type f -name "*.c")
CFILES 		= $(notdir $(CFILES_DIR)) 
HFILES_DIR 	= $(shell find . -type f -name "*.h")
HFILES 		= $(notdir $(HFILES_DIR))
HDIRS		= $(sort $(dir $(HFILES_DIR)))

AFILES_DIR 	= $(shell find . -type f -name "lib*.a")
AFILES		= $(notdir $(AFILES_DIR))
ADIRS		= $(sort $(dir $(AFILES_DIR)))
 
SOFILES_DIR = $(shell find . -type f -name "lib*.so")
SOFILES		= $(notdir $(SOFILES_DIR))
SODIRS		= $(sort $(dir $(SOFILES_DIR)))

# 包含所有含有.h文件的目录
INCLUDES += $(HDIRS:%=-I%)
$(warning INCLUDES : [ $(INCLUDES) ])
CFLAGS 	+= $(INCLUDES)

# 编译标志 -Werror
CFLAGS 	+= -Wall -rdynamic
CFLAGS 	+= -g -MD -O2 -static
CFLAGS  += -Wno-unused-parameter -Wno-unused-variable

CPPFLAGS += $(CFLAGS) -std=c++11

# 含有.a .so文件的目录
LDFLAGS += $(ADIRS:%=-L%)
LDFLAGS += $(SODIRS:%=-L%)
#LDFLAGS += -L./openssl/lib/

# 引用库文件
LDFLAGS += $(AFILES:lib%.a=-l%)
LDFLAGS += $(SOFILES:lib%.so=-l%)
LDFLAGS += -lpthread
LDFLAGS += -lm

$(warning LDFLAGS : [ $(LDFLAGS) ])

# 包含所有的目录
VPATH = $(DIRS)

# 所有的.c/.cpp文件,需要更改
#CFILES = $(CFILES)
SOURCES = cJSON.c mod_mqtt.c
SOURCESCXX = main.cpp drv_can.cpp mod_can.cpp devicemgr.cpp 

$(warning SOURCES : [ $(SOURCES) ])
$(warning SOURCESCXX : [ $(SOURCESCXX) ])

# 目标及依赖
OBJS	= $(SOURCES:%.c=obj/%.o) $(SOURCESCXX:%.cpp=obj/%.o)
DEPS 	= $(SOURCES:%.c=obj/%.d) $(SOURCESCXX:%.cpp=obj/%.d)
 
###########################################################
#CC编译时,库的依赖要放在文件之后 $(CC)  $^ -o $@ $(LDFLAGS)

.PHONY : all clean cleanall

all : $(TARGET)

$(TARGET) : $(OBJS)
	@echo
	@echo "Linking..."
	@echo
	$(LINK)  $^ -o $@ $(LDFLAGS)
	@echo
	@echo "enjoy < $(TARGET) > Good Luck."
	@echo

obj/%.o : %.c
	@mkdir -p obj
	$(CC) $(CFLAGS) -c $< -o $@

obj/%.o : %.cpp
	-@mkdir -p obj
	$(CXX) $(CPPFLAGS) -c $< -o $@

clean :
	rm -rf $(OBJS) $(DEPS) obj

cleanall :
	rm -rf $(OBJS) $(DEPS) obj $(TARGET)

# 包含生成的依赖关系
sinclude $(DEPS)





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值