makefile编写通用模板 可切换交叉编译与G++

切换主要用到ifeq ($(a),n)
即使用变量a的赋值不同作为判断条件
具体语法为

ifeq ($(条件变量),y)
	#语句一
else
	#语句二
endif

所以切换编译工具链可以通过改变CC的值即可,具体通用Make file文件如下:

ARCH:=arm
TESTINBOARD=n
ARCHITECTURE:=/home/xxx1/arm-linux-gnueabi-
ifeq ($(TESTINBOARD),y)
	CROSS_COMPILE:= $(ARCHITECTURE)
else
	CROSS_COMPILE:= 
endif
#TARGET
TARGET = test
#SOURCES
SOURCES = test.cpp
#OBJECTS
OBJECTS = ${SOURCES:.cpp=.o}


CFLAGS := -g -Wall -O3 -Werror
#
CPPFLAGS += $(CFLAGS)
#env1的环境
ENV1_DIR=/home/xxx2/env1
#env2的环境
ENV2_DIR=/home/xxx3/env2

#EXTRA_CFLAGS
EXTRA_CFLAGS += -I$(ENV1_DIR)/include
EXTRA_CFLAGS += -I$(ENV2_DIR)/share/

ENV1_LIBDIR=$(ENV1_DIR)/lib
#LIBS
LDFLAGS += -L${ENV1_LIBDIR} -lsqlite3
#(-L+lib地址)
#(-l+lib库名)
LDFLAGS += -lpthread -lm


#CC = $(CROSS_COMPILE)g++
CC = $(CROSS_COMPILE)g++

$(TARGET):$(OBJECTS)
ifeq ($(TESTINBOARD),y)
	$(CC) $(CPPFLAGS) -o $(TARGET) ${OBJECTS} $(LDFLAGS)
else
	$(CC) $(CPPFLAGS) -o $(TARGET) ${OBJECTS}
endif
	
$(OBJECTS): $(SOURCES)
	$(CC) $(CPPFLAGS) -o $@ -c $<
.PHONY:
	clean
clean:
	rm -f $(TARGET)
	find ./ -name "*.o" |xargs rm -rf

对于通用文档编写来说以下几个点比较关键
1.源文件管理

#SOURCES
SOURCES = test.cpp
SOURCES += 源文件2.cpp
SOURCES += 源文件3.cpp
#OBJECTS
OBJECTS = ${SOURCES:.cpp=.o}

2.目标文件编译

$(TARGET):$(OBJECTS)
	$(CC) $(CPPFLAGS) -o $(TARGET) ${OBJECTS} $(LDFLAGS)

3.源文件编译

$(OBJECTS): $(SOURCES)
	$(CC) $(CPPFLAGS) -o $@ -c $<

或者

$(OBJECTS): $(SOURCES)
	$(CC) $(CPPFLAGS) -o $@ -c $^

或者

$(OBJECTS): $(SOURCES)
	$(CC) $(CPPFLAGS) -o $(OBJECTS) -c $(SOURCES)

三者区别待后续补充

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值