如何在Makefile中添加多个依赖项

时间:2014-05-05 06:36:13

标签: linux-kernel makefile centos

我有简单的模块程序,它将调用其他文件中的其他函数。例如:

   Arith.c <=== main module which calls sum(), diff(), mul() ...
    |
    |----sum.c 
    |----Sub.c
    |----mul.c
    |----div.c
            |----remainder.c
            |----quotient.c

我为它编写了程序。对于make文件我不懂如何写。我研究了section 3.3 here并编辑了Makefile

所以现在我的make文件是(我只测试了总和)

obj-m := arith.o
arith-y += sum.o

KDIR=/lib/modules/$(shell uname -r)/build

module: 
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean

当我运行make时,它编译并生成arith.ko。当我插入它时没有在dmesg中显示任何内容。当我插入其他模块dmesg正常工作时。

arith.c:

extern void sum(void);

int init_module(void)
{
        pr_info("module inserted..\n");
        sum();

        return 0;
}

void cleanup_module(void)
{
        pr_info("module removed..\n");

}

sum.c:

void sum(void)
{
        pr_info("sum of 1 and 2: %d\n", 1+2);
}

其他信息:

如果我在arith-y += sum.o中发表评论Makefile而未在sum中调用arith.c函数,dmesg正常工作。

问题

1.是否使文件正确?

2.如果它是正确的,为什么arith模块在​​dmesg中没有显示任何内容甚至其他模块工作正常?

3.如果不正确,如何写Makefile以及为什么?

1 个答案:

答案 0 :(得分:0)

宣布后,您永远不会引用obj-marith-y;所以他们要么:

  • 您的make知道的某种魔力(我怀疑),
  • 您需要在其他地方引用的正常变量,或
  • 死密码

您可以通过内核树查看一个简单的makefile,您可以阅读并详细了解它。