我有一个需要在 2 个不同内核版本上编译的 linux makefile。makefile 不是从 automake/autoconf 生成的。
C 代码已经使用宏为不同的内核版本生成不同的代码,但是 makefile 中的某些功能也需要进行调节。
有没有办法在makefile中做:
if (kernel_version > 2.6.30)
newer_kernel = 1
else
newer_kernel = 0
endif
好吧,我可以想到一种使用 bash 的快速方法:
KERNEL_VERSION=`uname -r`
HIGHER_VERSION=`echo -e "$KERNEL_VERSION\n2.6.30" | sort -g -t '.' | tail --lines=1`
if [ "$HIGHER_VERSION" == "2.6.30" ]
# its an older kernel
else
# its a newer kernel
fi
基本上,您使用 uname 获取当前内核的版本,然后将其与 2.6.30 使用sort
(-g 标志启用数字排序,-t '.'
意味着使用点作为字段分隔符)进行比较,然后使用 tail 确定两个版本中的哪一个在列表中更高。不完全是一个漂亮的解决方案,但它会起作用。
您可以将其放入单独的脚本或直接放入 makefile 配方