2012-06-21 66 views
1

我有一个Linux makefile需要在2个不同的内核版本上编译。 makefile不是从automake/autoconf生成的。Linux makefile检查所需的最小Linux内核版本

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

是否有一个makefile办法做到:

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

回答

1

嗯,我能想到的一个快捷方式使用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获得然后使用sort(-g标志启用数字排序,-t '.'表示使用点作为字段分隔符)将其与2.6.30进行比较,然后使用tail来确定列表中两个版本中的哪一个更高。不完全是一个美丽的解决方案,但它会工作。

你可以把它放到一个单独的脚本中或直接放到makefile配方中

+0

小心! ''sort -g -t'。''不能正确排列“3.5,3.8,3.12”,因为它会认为'3.12'<'3.8'。希望''sort -V''将按预期工作。 – vaab