如何在Makefile中检查内核版本

时间:2013-02-25 09:00:31

标签: linux makefile kernel

如何在Makefile中查看我的内核版本?

基于内核版本,我想相应地选择一些头文件。

4 个答案:

答案 0 :(得分:1)

如果您正在编写某些应用程序,则可以

 KERNELVERSION=$(shell uname -a)

或其他一些shell命令,可能是cat /proc/version

对于内核模块,请参阅cnicutar's answer

答案 1 :(得分:1)

KVER = $(shell uname -r)
KMAJ = $(shell echo $(KVER) | \
sed -e 's/^\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*.*/\1/')
KMIN = $(shell echo $(KVER) | \
sed -e 's/^[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*.*/\1/')
KREV = $(shell echo $(KVER) | \
sed -e 's/^[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/')

kver_ge = $(shell \
echo test | awk '{if($(KMAJ) < $(1)) {print 0} else { \
if($(KMAJ) > $(1)) {print 1} else { \
if($(KMIN) < $(2)) {print 0} else { \
if($(KMIN) > $(2)) {print 1} else { \
if($(KREV) < $(3)) {print 0} else { print 1 } \
}}}}}' \
)

ifeq ($(call kver_ge,3,8,0),1)
echo great or equal than 3.8.0
else
echo less than 3.8.0
endif

答案 2 :(得分:0)

我没有50个声誉,所以我无法在评论中回答voght先生的评论(请尽我所能!)但我可以这样做,就像另一个答案一样,所以这里有。

代码使用内置shell来shell( bash )命令,如 uname echo ,并分配类似于变量的宏例如KVER到结果。 uname 提供了内核版本,代码继续使用unix sed (流编辑器; man sed 获取更多信息)来提取每个结果中的major,minor和rev数字,并将它们分配给离散的类似变量的宏。然后他为进程分配一个宏名kver_ge(使用 awk test ,以及 if shell内置函数)测试内核版本是否大于作为参数提供的版本。 非常酷,适合我。

答案 3 :(得分:0)

一种简单的方法是,首先通过Makefile中的测试为变量分配true / false(在下面的示例中为1/0),然后使用ifeq命令(如goodgoodstudydaydayup的答案),这是一种更简单的方法:

library(rbenchmark)
benchmark(lapply_test(), loop_test())
           test replications elapsed relative user.self sys.self
1 lapply_test()          100  102.08    1.043    100.91     0.25  
2   loop_test()          100   97.86    1.000     96.87     0.15