我有源代码:
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_INFO "Hello world %i\n", BUILD_NUMBER);
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
和一个makefile:
obj-m += hello-1.o
BUILD_NUMBER := 42
# How to pass BUILD_NUMBER to hello-1.c ???
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
现在如何将BUILD_NUMBER参数从makefile传递到源代码?
由于Linux构建系统使用内核提供的Makefile,因此无法对其进行更改。我建议您将版本号直接放在源代码中,而不要放在Makefile中。
有一种可能的想法。您可以定义CPPFLAGS
环境变量。它应该由内核Makefile传递给C编译器命令行。如果将此CPPFLAGS变量定义为-DVERSION=42
,则可以VERSION
在源文件中使用此宏。
all:
CPPFLAGS="-DVERSION=42" make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
请注意,CPPFLAGS
代表“ C预处理程序标志”。它与C ++无关。
经过测试。这是行不通的。但是有一个解决方案。内核Makefile允许(并使用)KCPPFLAGS环境变量的定义,该环境变量将被添加到内核Makefile中定义的CPPFLAGS中。
您必须使用:
all:
KCPPFLAGS="-DVERSION=42" make -C /lib/modules/$(shell uname -r)/build M=$(PWD)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句