编写一个简单的 makefile 文件
这里假设用户在linux下编写一个example的应用程序,它由下列文件组成:1)三个c语言源程序:main.ciodata.crun.c2)一个汇编语言程序:lo.s请...
这里假设用户在 linux 下编写一个 example 的应用程序,它由下列文件组成:
1)三个c语言源程序:main.c iodata.c run.c
2)一个汇编语言程序:lo.s
请为它编写一个简单的 makefile 文件,用来编译成可执行文件
谢谢 展开
1)三个c语言源程序:main.c iodata.c run.c
2)一个汇编语言程序:lo.s
请为它编写一个简单的 makefile 文件,用来编译成可执行文件
谢谢 展开
展开全部
makefile文件里面主要有三种内容:
1.变量声明:
变量声明就是一种基本的严格字符替换的操作。
比如在前面声明了:objects=program.o foo.o utils.o
那么在后面出现的所有$(objects)或者${objects}都会被自动替换成上面的那个字符序列,而且是严格替换,即不带空格的。
2.映射法则
3.命令:
映射法则和命令通常都是联合起来组成这样的结构形式:
target... : prerequisites..
command
可以简单地理解为通过prerequisites,也就是先决的依赖文件,采取后面描述的相应的命令(这里的命令都是linux里的shell命令)command之后(一般是)生成了文件target。命令的前面都要按以下tab建留一段空白来表示它是命令。
有的target后面并没有先决条件,也就是后面的命令是无条件执行的。
makefile 文件c语言程序:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
makefile:
# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
1.变量声明:
变量声明就是一种基本的严格字符替换的操作。
比如在前面声明了:objects=program.o foo.o utils.o
那么在后面出现的所有$(objects)或者${objects}都会被自动替换成上面的那个字符序列,而且是严格替换,即不带空格的。
2.映射法则
3.命令:
映射法则和命令通常都是联合起来组成这样的结构形式:
target... : prerequisites..
command
可以简单地理解为通过prerequisites,也就是先决的依赖文件,采取后面描述的相应的命令(这里的命令都是linux里的shell命令)command之后(一般是)生成了文件target。命令的前面都要按以下tab建留一段空白来表示它是命令。
有的target后面并没有先决条件,也就是后面的命令是无条件执行的。
makefile 文件c语言程序:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
makefile:
# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
obj=main.o iodata.o run.o io.s
example: $(obj)
cc -o example $(obj)
#下面的可有可无
main.o:main.c
cc -c main.o
iodata.0:iodata.c
cc -c iodata.c
run.o:run.c
cc -c run.c
#io.s 我不敢确定啊
example: $(obj)
cc -o example $(obj)
#下面的可有可无
main.o:main.c
cc -c main.o
iodata.0:iodata.c
cc -c iodata.c
run.o:run.c
cc -c run.c
#io.s 我不敢确定啊
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询