makefile/gcc 向代码传递宏

今天捡起去年年初写的AWS IOT C code进行一波维护。代码通过AWS IOT 和服务器进行交互,具有基本控制功能,这是在X86平台上。但在嵌入式平台上还多了部分跑rtmp码流部分的代码。为了方便的在不同平台上调试代码不用去手动修改其中的内容今天在MakeFile中添加了平台这个变量并传入C代码中。

而这种根据平台不同,需要调用不同编译器,依赖不同的lib,执行代码中不同部分的情况非常常见,所以需要有一套机制,仅通过make 下不同参数既能实现生成不同平台的代码的功能,这里写一个sample 以作记录。

先上测试C代码。

#include <stdio.h>

int main(int argc, char **argv) {
	printf("All platform say hello!\n");

	#if ARM
		printf("ARM say hello  say!\n");
	#elif X86
		printf("X86 say hello  say!\n");
	#endif

	return 0;

}

使用gcc -D参数 定义宏 将我们需要区别的平台宏定义进去。实际的效果即为这样的。

gcc test.c -D X86 -o sample

All platform say hello!
X86 say hello  say!

gcc test.c -D ARM -o sample

All platform say hello!
ARM say hello  say!

而上诉需要实现不同平台采用不同编译链,不同平台的lib。执行代码中的不同部分。所以会把这部分内容放在Makefile中。

下面上一个简略的MakeFile进行说明,如果更加不同平台来实现依赖不同lib 执行不同编译工具 跑不同位置的代码的:

PLATFORM?=ARM
APP_DIR = .
APP_INCLUDE_DIRS += -I $(APP_DIR)
APP_NAME = test
APP_SRC_FILES = $(APP_NAME).c
LIB_DIR = $(APP_DIR)/lib

LIB = -L$(LIB_DIR)/$(PLATFORM) #不同平台找不同lib

ifeq ("$(PLATFORM)","X86") #不同平台编译器 引用不同的lib
    CC = gcc
    LIB += -lsioclient
endif

ifeq ("$(PLATFORM)","ARM")
    CC=/home/xx.xx/work/toolchain-arm_cortex-a7+vfp_gcc-4.8-linaro_glibc-2.19_eabi/bin/arm-openwrt-linux-gcc 
    LIB += -lrtmp
endif

INCLUDE_ALL_DIRS += $(APP_INCLUDE_DIRS)
SRC_FILES += $(APP_SRC_FILES)
COMPILER_FLAGS += -g 
MAKE_CMD = $(CC) $(SRC_FILES) $(COMPILER_FLAGS) -D $(PLATFORM) -o $(APP_NAME) $(LIB) $(INCLUDE_ALL_DIRS)
all:
    $(MAKE_CMD)
clean:
    rm -f $(APP_DIR)/$(APP_NAME)

我们执行make PLATFORM=ARM
就会执行下面的编译语句:

/home/xx.xx/work/toolchain-arm_cortex-a7+vfp_gcc-4.8-linaro_glibc-2.19_eabi/bin/arm-openwrt-linux-gcc  
test.c -g  -D ARM -o test  -L./lib/ARM -lrtmp -I .

传入test.c 的参数即为ARM,且依赖不同的lib

make PLATFORM=X86
就会执行下面的编译语句:

gcc test.c -g  -D X86 -o test  -L./lib/X86 -lsioclient -I .

传入test.c的参数即为X86,且依赖不同的lib

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值