编写一个简单的 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 文件,用来编译成可执行文件

谢谢
展开
 我来答
慎重还可靠灬宝贝f
2015-11-08 · TA获得超过12.9万个赞
知道大有可为答主
回答量:1.9万
采纳率:52%
帮助的人:2635万
展开全部
  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
秒懂百科
2021-03-01 · TA获得超过5.9万个赞
知道大有可为答主
回答量:25.3万
采纳率:88%
帮助的人:1.2亿
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
本思一体电脑
2013-03-22 · TA获得超过111个赞
知道小有建树答主
回答量:159
采纳率:0%
帮助的人:96.5万
展开全部
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 我不敢确定啊
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式