2021-3
一、网址参考
4、Makefile调用shell应该注意的地方(摩斯电码)
二、实践
1、在Makefile中用shell命令自动生成版本号:
方法1:
rtu.version文件内容: R7V1.2.0
version: @echo "#ifndef __VERSION_H_" > $(SCCU_DIR)/include/version.h @echo "#define __VERSION_H_" >> $(SCCU_DIR)/include/version.h @BUILD_TIME=`LC_TIME=en date +%y%m%d`; \ VERSION=`cat rtu.version`; \ NOW_VERSION="$${VERSION}-$${BUILD_TIME}"; \ echo "NOW_VERSION=$${NOW_VERSION}"; \ echo "#define SCCU_VERSION \"$${NOW_VERSION}\"" >> $(SCCU_DIR)/include/version.h; \ echo "#endif" >> $(SCCU_DIR)/include/version.h
方法2:
rtu.version 文件内容: RTU_TYPE=7 VERSION_MAJOR=1 VERSION_MINOR=2 VERSION_REVISION=0
version: @echo "#ifndef __VERSION_H_" > $(SCCU_DIR)/include/version.h @echo "#define __VERSION_H_" >> $(SCCU_DIR)/include/version.h @BUILD_TIME=`LC_TIME=en date +%y%m%d`; \ RTU_TYPE=`awk -F= '{if(/^RTU_TYPE/)print $$2}' rtu.version`; \ MAJOR_VER=`awk -F= '{if(/^VERSION_MAJOR/)print $$2}' rtu.version`; \ MINOR_VER=`awk -F= '{if(/^VERSION_MINOR/)print $$2}' rtu.version`; \ REV_VER=`awk -F= '{if(/^VERSION_REVISION/)print $$2}' rtu.version`; \ FULL_VER=R$${RTU_TYPE}V$${MAJOR_VER}.$${MINOR_VER}.$${REV_VER}-$${BUILD_TIME}; \ echo "VERSION = $${FULL_VER}"; \ echo "#define SCCU_VERSION \"$${FULL_VER}\"" >> $(SCCU_DIR)/include/version.h; \ echo "#endif" >> $(SCCU_DIR)/include/version.h
注意脚本语句中的$$、;和 \(前面有个空格)的用意:
1)shell中的变量前面都需要加$$
2)在Makefile中执行shell命令,一行创建一个进程来执行。这也是为什么很多Makefile中有很多行的末尾都是“; \”,以此来保证代码是一行而不是多行,这样Makefile可以在一个进程中执行
3)在Makefile中只能在target中调用Shell脚本,其他地方是不能输出的; 如
VAR="Hello" echo "$VAR" all: .....
以上代码任何时候都不会输出,没有在target内,如果上述代码改为如下:
VAR="Hello" all: echo "$VAR" .....
以上代码,在make all的时候将会执行echo命令。
2. 查看设备IP地址
当ifconfig不能用时,可以使用如下命令:
ip addr show (ifconfig不能用时)
ip address show