Makefile_vivi--$$BASH,if -x filename

该博客介绍了如何在Makefile中指定shell,通过检查环境变量$$BASH是否存在并执行相应命令,若不存在则选择/bin/bash或sh作为默认shell。

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

specify shell:

CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; /
else if [ -x /bin/bash ]; then echo /bin/bash; /
else echo sh; fi ; fi)

1、$$BASH 表示BASH完整路径。环境变量指定。

2、if [ -x "$$BASH" ]  then.. else.. fi

shell与if相关参数

[ -aFILE ] 如果 FILE 存在则为真。
[ -bFILE ] 如果 FILE 存在且是一个块特殊文件则为真。
[ -cFILE ] 如果 FILE 存在且是一个字特殊文件则为真。
[ -dFILE ] 如果 FILE 存在且是一个目录则为真。
[ -eFILE ]

[root@localhost iBMA_Driver-0.3.6]# ./build_manual.sh tencent-3.1 kernel version: 5.4.241-24.0017.16 Start build driver... In file included from /root/IBMA2.0/usr/src/iBMA_Driver-0.3.6/edma_drv/edma_host.h:21, from /root/IBMA2.0/usr/src/iBMA_Driver-0.3.6/edma_drv/bma_devintf.h:21, from /root/IBMA2.0/usr/src/iBMA_Driver-0.3.6/edma_drv/bma_pci.c:21: /root/IBMA2.0/usr/src/iBMA_Driver-0.3.6/edma_drv/securec.h:21:10: fatal error: securectype.h: No such file or directory #include "securectype.h" ^~~~~~~~~~~~~~~ compilation terminated. make[2]: *** [scripts/Makefile.build:262: /root/IBMA2.0/usr/src/iBMA_Driver-0.3.6/edma_drv/bma_pci.o] Error 1 make[1]: *** [Makefile:1779: /root/IBMA2.0/usr/src/iBMA_Driver-0.3.6/edma_drv] Error 2 make: *** [Makefile:47: all] Error 2 Build edma_drv failed, message:make -C /lib/modules/5.4.241-24.0017.16/build M=/root/IBMA2.0/usr/src/iBMA_Driver-0.3.6/edma_drv make[1]: Entering directory '/usr/src/kernels/5.4.241-24.0017.16' CC [M] /root/IBMA2.0/usr/src/iBMA_Driver-0.3.6/edma_drv/bma_pci.o make[1]: Leaving directory '/usr/src/kernels/5.4.241-24.0017.16'. Build driver ko failed. [root@localhost iBMA_Driver-0.3.6]# cat /root/IBMA2.0/usr/src/iBMA_Driver-0.3.6/edma_drv/Makefile host_edma_drv-objs := bma_pci.o bma_devintf.o edma_host.o obj-m := host_edma_drv.o KERNEL_VERSION ?= $(shell uname -r) KERNEL_DIR ?= /lib/modules/${KERNEL_VERSION}/build SUPPORT_SAFE_FLAG = $(shell grep -woEi 'kylin|uos|bclinux' /etc/os-release 2>/dev/null | wc -l) ifneq ($(SUPPORT_SAFE_FLAG),0) STACK_PROTECT ?= false endif STACK_PROTECT ?= true SECURE_DIR ?= ../secure/src/ GCC_VERSION_GREATER_OR_EQUAL_7 ?= $(shell expr `gcc -dumpversion | cut -f1 -d.` \>= 7) host_edma_drv-objs += $(SECURE_DIR)securecutil.o host_edma_drv-objs += $(SECURE_DIR)secureinput_a.o host_edma_drv-objs += $(SECURE_DIR)secureprintoutput_a.o host_edma_drv-objs += $(SECURE_DIR)memset_s.o host_edma_drv-objs += $(SECURE_DIR)memcpy_s.o host_edma_drv-objs += $(SECURE_DIR)sprintf_s.o host_edma_drv-objs += $(SECURE_DIR)vsprintf_s.o ifdef DRV_VERSION EXTRA_CFLAGS += -D DRV_VERSION=$(DRV_VERSION) endif ifeq ($(STACK_PROTECT), true) EXTRA_CFLAGS += -fno-stack-protector endif #EXTRA_CFLAGS += -I$(obj) -I$(obj)/../../include/ -I$(obj)/../include/ #EXTRA_CFLAGS += -I$(obj)/../secure/include/ EXTRA_CFLAGS += -Wformat=0 ifeq "$(GCC_VERSION_GREATER_OR_EQUAL_7)" "1" EXTRA_CFLAGS += -Wimplicit-fallthrough=3 endif #EXTRA_CFLAGS += -fno-stack-protector #EXTRA_CFLAGS += -I$(src)/../include # 主头文件目录 #EXTRA_CFLAGS += -I$(src)/../secure/include #EXTRA_CFLAGS += -I$(src)/../include PWD := $(shell pwd) all: $(MAKE) -C $(KERNEL_DIR) M=$(PWD) strip --strip-debug *.ko; clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.order *.unsigned *.symvers
最新发布
07-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值