【发布时间】:2013-08-23 16:57:46
【问题描述】:
我正在使用共享源代码构建一组 Linux 内核模块。据我了解,Makefile 必须命名为“Makefile”,所以我必须使用相同的 Makefile 来构建两个不同的模块。如何在同一个 Makefile 中使用相同的源代码,但使用两个不同的构建选项构建两个不同的模块?
例如,我的模块被称为 module1 和 module2。所以我有以下行来定义它们:
obj-m := module1.o module2.o
在其他文件中,module1 和 module2 都需要使用相同的源文件code.c,但使用不同的构建选项构建。例如,Makefile 包含以下几行:
module1-objs = module1_code.o other_code.o
module2-objs = module2_code.o other_code.o
我希望 module1_code.o 和 module2_code.o 从 code.c 构建,但有不同的选项。具体来说,我想要一个 module1_code.o,其中定义了一个宏 -DPREPROCEFFOR_FLAG=1,而 module2_code.o 构建时没有宏。
据我了解,Linux 中使用的 Makefiles 系统隐含地推断,对于名为“code.o”的目标文件,源文件名为“code.c”,那么我该如何实现呢?有可能吗?有没有更好的方法来做到这一点?
【问题讨论】:
-
你可以随意命名你的makefile。默认情况下,make 只会查找certain filenames。对于任何其他名称,您需要使用
-f参数。 -
如果您为您的目标文件制定特定规则,并以相关源文件为先决条件,并且构建目标文件的规则将使用该规则而不是您提到的默认规则。所以
module1_code.o: code.c ; <command to build>. -
树外构建也可以解决这个问题:stackoverflow.com/questions/5718899/…
标签: makefile linux-kernel linux-device-driver