makefile_define补充

本文深入解析Makefile中define指令的使用技巧与注意事项,探讨变量定义与指令执行的区别,特别是`cmd`与$(shellcmd)的不同行为,通过实例展示define如何在Makefile中正确应用。

对makefile里的define补充说明

makefile里可能会用到define来打包一些可能会重用的指令,但是因为makefile里实际上会重用代码的情况并不多…所以,define是一个没怎么设计的挺难用的东西;有一点需要注意的是在define-endef范围内的变量定义和指令的执行,在该范围内,变量定义是无效的,在define段执行时回座位字符串展开;指令的执行则是需要注意一下`cmd`和$(shell cmd)的区别,区别是`cmd`在执行到当前指令的时候不展开,而$(shell cmd)在执行到当前指令的时候是展开为指令结果的;

define output
	A=pwd#作为字符串输出
	A=`pwd`#作为字符串输出
	A=$(shell pwd)#只有这个A的值是pwd展开之后的值,但是!
	echo $(A)#这句的输出是空的,上一句A=$(shell pwd)并不是存在一个被赋值的变量A,
	#而是define在执行的时候A=是一个字符串,然后$(shell pwd)在echo语句中也被直接展开为了字符串的形式;
	echo pwd#输出是echo pwd pwd,也就是pwd不展开为shell指令
	echo `pwd`#输出是echo `pwd` a/b/c,也就是先输出指令字符串,随后切到shell执行pwd
	echo $(shell pwd)#输出是echo a/b/c a/b/c,在这句指令显示的阶段$(shell pwd)就已经展开为对应的字符串了
	
endef
all:
	$(call output) 
include $(TOPDIR)/rules.mk PKG_NAME:=libtpsocket PKG_RELEASE:=1 PKG_VERSION:=1.0 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) include $(INCLUDE_DIR)/package.mk define Package/$(PKG_NAME) SECTION:=TP-Link CATEGORY:=TP-Link iplatform apps MAINTAINER:=Jinfu Chen DEPENDS:=+libubox +zlib +libpthread +librt +TPSOCKET_MBEDTLS:libmbedtls \ +TPSOCKET_OPENSSL:libopenssl +TPSOCKET_WOLFSSL:libcyassl TITLE:=LibTPSocket endef define Package/$(PKG_NAME)/config menu "Configuration" choice prompt "ssl lib version" default TPSOCKET_MBEDTLS help Select ssl lib version. config TPSOCKET_MBEDTLS bool "use mbedtls lib" config TPSOCKET_OPENSSL bool "use openssl lib" config TPSOCKET_WOLFSSL bool "use wolfssl lib" config TPSOCKET_NOSSL bool "use no ssl lib" endchoice endmenu endef ifeq ($(CONFIG_TPSOCKET_WOLFSSL),y) TARGET_CFLAGS += -DTPSOCKET_USE_WOLFSSL=1 -lcyassl SSL_SETTING_DEFINE=\#define TPSOCKET_USE_WOLFSSL 1 endif ifeq ($(CONFIG_TPSOCKET_OPENSSL),y) TARGET_CFLAGS += -DTPSOCKET_USE_OPENSSL=1 -lssl -lcrypto SSL_SETTING_DEFINE=\#define TPSOCKET_USE_OPENSSL 1 endif ifeq ($(CONFIG_TPSOCKET_MBEDTLS),y) ifeq ($(CONFIG_PACKAGE_mbedtls_version),2) TARGET_CFLAGS += -DMBEDTLS_VERSION_TWO endif TARGET_CFLAGS += -DTPSOCKET_USE_MBEDTLS=1 -lmbedtls -lmbedx509 -lmbedcrypto SSL_SETTING_DEFINE=\#define TPSOCKET_USE_MBEDTLS 1 endif ifeq ($(CONFIG_TPSOCKET_NOSSL),y) TARGET_CFLAGS += -DTPSOCKET_USE_NOSSL=1 SSL_SETTING_DEFINE=\#define TPSOCKET_USE_NOSSL 1 endif ifeq ($(CONFIG_HTTP_HMAC_HKDF_SUPPORT),y) TARGET_CFLAGS += -DHTTP_HMAC_HKDF_SUPPORT endif define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/ mkdir -p $(STAGING_DIR)/usr/include/$(PKG_NAME)/ $(CP) ./src/*.h $(STAGING_DIR)/usr/include/$(PKG_NAME)/ echo "$(SSL_SETTING_
09-16
补充说明,以下是已存在的shell文件,硬件宏的使用,只编译sdk时手动开启一个硬件宏。 #!/bin/bash #默认进行清理,=0 表示不清理 # export MAKE_CLEAN=0 #设置相机库相关:设置相机类型(参见下方说明)以及版本号,输出的库名称 export CAMERA_TYPE_MACRO=CAM_ZYNQ_1200W export CAMERA_SOVERSION_VAR=1.0.1 #设置链接方式为动态链接,默认为静态链接 # export CAMERA_SDK_LINK_DYNAMIC=yes #执行编译脚本 ./app_sdk_build_sh # /** 相机型号, 每次编译选择一种 //公司研发内部代号,供应商,sensor型号,特性概览 **/ # 研发内部代号,供应商, sensor型号,特性概览 **/ # /*面阵部分*/ # //#define CAM_ZYNQ_200W //Z200, CCD_VENDOR_E2V, sensor型号 ev76c570, 面阵,全局曝光 # //#define CAM_ZYNQ_1000W //Z1000, CCD_VENDOR_E2V, sensor型号 EV2S10M, 面阵,全局曝光 # //#define CAM_ZYNQ_1200W //Z1200, CCD_VENDOR_E2V, sensor型号 EV2S16M(SP13S215792), 面阵,全局曝光 # //#define CAM_ZYNQ_2000W //Z2000, CCD_VENDOR_SONY, sensor型号 IMX183CLK, 面阵,卷帘曝光(有全局曝光,但需要机械快门) # //#define CAM_ZYNQ_1800W //Z1800, 长光辰芯, sensor型号 GMAX2518, 面阵,全局曝光 # //#define CAM_ZYNQ_1200W_V1 //Z1200v1, CCD_VENDOR_SONY,sensor型号 IMX226CLJ, 面阵,卷帘曝光 # /*线扫部分*/ # //#define CAM_ZYNQ_4KLINE_S0 //Z4K, CCD_VENDOR_E2V, sensor型号 IT-K3-04120, 线阵 # //#define CAM_ZYNQ_4KLINE_S1 //Z4K_S1,南北微电子(RGBIC), sensor型号 P7044SL, 线阵 # //#define CAM_ZYNQ_8KLINE_S0 //Z8K, CCD_VENDOR_E2V, sensor型号 IT-K1-08240, 线阵 # //#define CAM_ZYNQ_8KLINE_S1 //Z8K_S1, 南北微电子(RGBIC), sensor型号 P7088SL, 线阵 # //#define CAM_ZYNQ_8KLINE_S0_AF //Z8K_AF, CCD_VENDOR_E2V, sensor型号 IT-K1-08240, 线阵,线扫相机自动变焦,在Z8K的采图系统上叠加了一个变焦子系统, 注意要用3.6.x系列读码算法 以下是工程makefile中的关于硬件宏使用部分: # 标记不使用option.h 中 CAMERA_TYPE 宏定义 ifdef CAMERA_TYPE_MACRO_IS_DEFINED GLOBAL_CFLAGS += -DCAMERA_TYPE_MACRO_IS_DEFINED GLOBAL_CFLAGS += -D$(CAMERA_TYPE_MACRO) endif
最新发布
11-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值