1

我有一个需要在 2 个不同内核版本上编译的 linux makefile。makefile 不是从 automake/autoconf 生成的。

C 代码已经使用宏为不同的内核版本生成不同的代码,但是 makefile 中的某些功能也需要进行调节。

有没有办法在makefile中做:

if (kernel_version > 2.6.30)
    newer_kernel = 1
else
    newer_kernel = 0
endif
4

1 回答 1

2

好吧,我可以想到一种使用 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 配方

于 2012-06-21T18:25:28.593 回答