红联Linux门户
Linux帮助

makefile语法问题

发布时间:2010-11-19 17:43:55来源:红联作者:eddy_liu
下面是一个简单的打印字符的驱动程序
#include
#include

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
printk(“hello, linux\n”);
}

static void hello_exit(void)
{
printk(“goodbye linux \n”);
}

module_init(hello_init);
module_exit(hello_exit);

其Makefile为

1 EXEC = hello
2 OBJS = hello.o
3 SRC = hello.c

4 INCLUDE = /usr/src/linux-2.6.10/include
5 CC = arm-linux-gcc
6 LD = arm-linux-ld
7 MODCFLAGS = -O2 -Wall -D__KERNEL__ -DMODULE -I$(INCLUDE) -march=armv4t -c -o
8 LDFLAGS = -r

9 all: $(EXEC)

10 $(EXEC): $(OBJS)
$(LD) $(LDFLAGS) -o $@ $(OBJS)

11 %.o:%.c
$(CC) $(MODCFLAGS) -mapcs -c $< -o $@

12 clean:
-rm -f $(EXEC) *.o *~ core

问题1:
在第7行中参数-D__KERNEL__ -DMODULE和-march=armv4t是什么意思
问题2:
第8行的参数 -r是什么意思
问题3:
第11行参数-mapcs是什么意思
问题4:
第12行参数*~ 和core是什么意思
问题5:
如果想查询下arm-linux-gcc的相关参数该如何办呢?#info arm-linux-gcc就算啦,我试过,看起来一点头绪都没有。
如果想查询下Makefile的一些相关语法呢?
文章评论

共有 8 条评论

  1. 花开花败2011 于 2011-02-12 17:45:56发表:

    软件开发者路线图:从学徒到高手

  2. shenhao0129 于 2010-11-20 11:48:45发表:

    引用:
    对与2440下面的选项应该选那个呢?
    armv2、armv2a、armv3、armv3m、armv4和armv4t
    eddy_liu 发表于 2010-11-20 00:17

    armv4t的

  3. oleuner 于 2010-11-20 08:45:59发表:

    不懂

  4. eddy_liu 于 2010-11-20 00:17:59发表:

    对与2440下面的选项应该选那个呢?
    armv2、armv2a、armv3、armv3m、armv4和armv4t

  5. eddy_liu 于 2010-11-20 00:10:23发表:

    但我还是不明白-D__KERNEL__ -DMODULE 到底是什么意思呢?这两个参数是做什么用的呢?在makefile中加上这两个参数会对编译起到什么作用呢?

  6. eddy_liu 于 2010-11-20 00:03:16发表:

    恩,也许吧。以前参加过电子设计,在校队呆过,专门负责单片机编程。用过MCS-51,CIP-51,MSP-430,觉得对底层还算了解。而且写过的程序也不算少。所以,觉得直接驱动来的要快些。但现在才发现,想象的和实际的差别很大。

  7. shenhao0129 于 2010-11-19 22:27:37发表:

    你需要一些更基础的关于Linux下编程的书而不是一上来就是设备驱动程序

  8. alick 于 2010-11-19 18:13:19发表:

    你问的这些都和makefile语法没关系,1--4都是给编译器的选项,具体什么意思看编译器手册。
    涉及到makefile的:
    CFLAGS指编译选项
    LDFLAGS指链接时选项

    文件编辑中的自动备份文件一般以~为结尾,*~值所有以~结尾的文件,core则是程序崩溃时会产生的
    东西(内存映像)。