2012-06-21 64 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