Linux_Makefile实验(2)

2025-08-16

例如:make –f Hello.makefile 3.2嵌套执行make 在一些大的工程中,不同模块或是不同功能的源文件放在不同的目录中,可以在每个目录中都书写一个该目录的Makefile,这有利于Makefile变得更加地简洁,而不至于把所有的东西全部写在一个Makefile中,这个技术对于进行模块编译和分段编译有着非常大的好处。 例如,有一个子目录叫subdir,这个目录下有个Makefile文件指明了这个目录下文件的编译规则。那么总控的Makefile可以书写: subsystem:

cd subdir && $(MAKE) 如果要传递变量到下级Makefile中,那么可以使用export 来声明。 3.3 GNU make命令选项

GNU make 命令还有一些其他选项,下面给出了这些选项。 命令行选项 含义 -C DIR 在读取 makefile 之前改变到指定的目录 DIR。 -f FILE 以指定的 FILE 文件作为 makefile。 -h 显示所有的 make 选项。 -i 忽略所有的命令执行错误。 -I DIR 当包含其他 makefile 文件时,可利用该选项指定搜索目录。 -n 只打印要执行的命令,但不执行这些命令。 -p 显示 make 变量数据库和隐含规则。 -s 在执行命令时不显示命令。 -w 在处理 makefile 之前和之后,显示工作目录。 -W FILE 假定文件 FILE 已经被修改。

【实验仪器】

1、装有Linux操作系统的PC机一台;

2、XSBase270或XSBase255 ARM实验开发平台一套

【实验内容】

一、使用命令行的方式手动编译程序方法 1、利用文本编辑器创建hello.c文件 //hello.c //written by Emdoor #include int main() { printf(\ return 1; } 2、手动编译hello应用程序 在hello.c的目录的终端下输入: [root@local]$ gcc –c hello.c [root@local]$gcc hello.o –o hello

6

通过ls命令查看当前目录下是否生成源代码hello.c的object文件hello.o和可执行文件hello,运行可执行文件hello。查看一下运行结果。 [root@local]$./hello

3、修改hello.c文件,重新手动编译应用程序。 4、删除hello.o和hello文件 [root@local]$rm –f hello.o [root@local]$rm –f hello

二、利用 GNU make 自动编译应用程序方法

1、 利用文本编辑器创建一个makefile文件,并将其保存到与hello.c相同的目录下。 # makefile test for hello program #written by Emdoor CC=gcc CFLAGS= all: hello hello: hello.o $(CC) $(CFLAGS) hello.o –o hello hello.o: hello.c $(CC) $(CFLAGS) –c hello.c –o hello.o clean: rm –rf hello *.o 2、先后执行如下命令 [root@local]$make [root@local]$ls [root@local]$./hello

查看并记录所生成的文件和运行的结果。 3、执行make clean命令: [root@local]$make clean

4、修改hello.c文件,重复第2、3步操作,查看并记录所生成的文件和运行结果,并与手动编译进行比较,写出你的结论。

5、重新编辑makefile文件(斜黑体表示修改部分) # makefile test for hello program #written by Emdoor CC=gcc CFLAGS= OBJS=hello.o all: hello hello: $(OBJS) $(CC) $(CFLAGS) $^ -o $@ hello.o: hello.c $(CC) $(CFLAGS) –c $< -o $@ clean: rm –rf hello *.o

7

6、重复第2,3步操作,查看并记录所生成的文件和运行的结果。比较这两种操作,写出你的结论。同时指出$^ 、$@、$<在上述Makefile中的含义。

三、多个.c文件的编译

1、创建文件hello1.c、hello2.c、hello.h和makefile //hello1.c //written by Emdoor #include int main() { printf(\ test2(); return 1; } //hello2.c //written by Emdoor #include \#include void test2(void) { printf(\–hello2\\n\} //hello2.h //written by Emdoor void test2(void); # makefile test for multi files program #written by Emdoor CC=gcc CFLAGS= OBJS=hello1.o hello2.o all: hello hello: $(OBJS) $(CC) $(CFLAGS) $^ -o $@ hello1.o: hello1.c $(CC) $(CFLAGS) –c $< -o $@ hello2.o: hello2.c $(CC) $(CFLAGS) –c $< -o $@ clean: rm –rf hello *.o 2、先后执行如下命令

8

[root@local]$make [root@local]$ls [root@local]$./hello

查看并记录所生成的文件和运行的结果, 写出你的结论。 3、修改makefile文件(斜黑体表示修改部分) # makefile test for multi files program #written by Emdoor CC=gcc CFLAGS= CFILES=$(wildcard *.c) OBJS=$(CFILES:%c=%.o) all: hello hello: $(OBJS) $(CC) $(CFLAGS) –o hello $(OBJS) .c.o: $(CC) –c $< clean: rm –rf hello *.o 4、重复第2步操作,查看并记录所生成的文件和运行的结果, 写出你的结论。并指出wildcard、.c.o的含义和变量CFILES代表的内容。

【思考题】

1、 根据提供的Linux操作系统源码中得Makefile结构,分析在工程中多级目录中存在着多

个makefile时,编译的顺序如何? 2、 根据Makefile中变量定义规则,如果实验中的hello.c文件编译到目标平台中运行,应该

怎样修改Makefile中变量参数?

9


Linux_Makefile实验(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:毕业论文-中国文人心中的“乌托邦”——从洞窟小说看魏晋文人多

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219