在Linux/FreeBSD/MacOS的控制台中执行uname命令可以得到当前平台的CPU类型和位数信息
,不过各种平台返回的信息没有一个统一的标准,这就给识别造成了困难,这个脚本可以把系统的平台信息稍作整理,变成一个格式化的字符串。
这对于交叉编译很有帮助。
生成的字符串分两个部分
如 FreeBSD-amd64
前一部分是OS的名字,后一部分是CPU的类型和字长,分x86,amd64,arm32,arm64一共4种。
脚本内容如下:
#!/bin/bash
platform_string=`uname|sed 's/-/ /g'|awk '{print $1}'`"-"`uname -a|awk '{print $(NF-1)}'|sed 's/^.*arm.*$/arm32/;s/^.*aarch64.*$/arm64/;s/^.*ARM64.*$/arm64/;s/^.*X86_64.*$/x86_64/'`
origin_string=(MINGW32_NT-x86_64 MINGW64_NT-x86_64 Darwin-x86_64 Darwin-arm64 FreeBSD-amd64 Linux-arm32 Linux-arm64 Linux-x86_64 Linux-x86 Linux-i386 Linux-i586 Linux-i686)
showing_string=(Ming-x86 Ming-amd64 MacOS-amd64 MacOS-arm64 FreeBSD-amd64 Linux-arm32 Linux-arm64 Linux-amd64 Linux-x86 Linux-x86 Linux-x86 Linux-x86)
index=0
for str in ${origin_string[@]}; do
if [ "$str" == "$platform_string" ]; then
echo ${showing_string[$index]};
fi
let index++
done
在不同平台中返回的结果如下:
Windows/MSYS32 : Ming-x86
Windows/MSYS64 : Ming-amd64
Linux/IA32 : Linux-x86
Linux/AMD64 : Linux-amd64
Linux/arm32 : Linux-arm32
Linux/arm64 : Linux-arm64
MacOS Intel : Darwin-amd64
MacOS M1/M2 : Darwin-arm64
FreeBSD/AMD64 : FreeBSD-amd64
如果你的CPU和OS不在上述之列,只需要在origin_string和showing_string里加上对应的信息就能正确工作了