1

2 つの異なるカーネル バージョンでコンパイルする必要がある Linux メイクファイルがあります。makefile は automake/autoconf から生成されません。

C コードは、カーネル バージョンごとに異なるコードを生成するマクロを使用して既に調整されていますが、makefile 内の特定の機能も調整する必要があります。

メイクファイルで行う方法はありますか:

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

1 に答える 1

2

さて、私はbashでそれを行うための1つの簡単な方法を考えることができます:

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を使用して2つのバージョンのどちらかを判別します。リストの上位にありました。必ずしも美しい解決策ではありませんが、機能します。

別のスクリプトに入れることも、makefileレシピに直接入れることもできます

于 2012-06-21T18:25:28.593 に答える