Makefile步步为营

本目录主要包含Makefile一步步递进学习的示例代码

makefile代码实例:https://www.lanzous.com/i9m9npi

step0:Makefile小实验

进行Makefile小实验,体验Makefile的功能。

目录中的Makefile是不严谨的编写方式。

目录中的Makefile_PHONY是严谨的编写方式。

make实验

切换至step0目录下,即Makefile所在的同级目录,使用如下命令实验:

#在主机上Makefile所在的目录执行如下命令
#查看当前目录的内容
ls
#执行make命令,make会在当前目录下搜索“Makefile”或“makefile”,并执行
make
#可看到make命令后的输出,它执行了Makefile中编写的命令
#查看执行make命令后的目录内容,多了test.txt文件
ls
#执行Makefile的targetd目标,并查看,少了test.txt文件
make targetd
ls
#执行Makefile的targetb目标,并查看,又生成了test.txt文件
make targetb
ls
#执行Makefile的targetc目标
make targetc

make使用-f参数可以指定使用其它文件。

#通过-f选项指定make使用的Makefile文件
make -f Makefile_PHONY
#本示例中其它操作与Makefile功能相同

step1:使用Makefile编译程序

使用Makefile编译Hello示例程序。

编译

编译的输出为hello_main文件

切换至step1目录下,即Makefile所在的同级目录,使用如下命令编译:

#后编译
make

运行

编译后使用如下命令运行:

./hello_main

step2:使用Makefile默认编译规则

使用Makefile编译Hello示例程序,Makefile中使用o文件依赖

编译及运行

本实验编译及运行操作与step1相同,切换至step2目录操作即可。


step3:使用变量

使用Makefile编译Hello示例程序,Makefile中使用变量

编译及运行

本实验编译及运行操作与step1相同,切换至step3目录操作即可。

Makefile_test实验

Makefile_test文件用于变量赋值实验测试,可执行如下命令实验:

make -f  Makefile
#实验输出为Makefile中各个变量的值

step4:使用变量及分支

使用Makefile编译Hello示例程序,Makefile中使用变量定义最终目标,并使用分支支持不同的架构

x86架构编译及运行

切换至step4目录下,即Makefile所在的同级目录,使用如下命令编译:

#先清理,否则可能因为*.o文件架构不同而出错
make clean
#后编译
make

编译后使用如下命令运行:

./hello_main

ARM架构编译及运行

切换至step4目录下,即Makefile所在的同级目录,使用如下命令编译:

#先清理,否则可能因为*.o文件架构不同而出错
make clean
#后编译
make ARCH=arm

编译后使用如下命令运行:

./hello_main

step5:使用函数

使用Makefile编译Hello示例程序,Makefile中使用函数,并支持层级目录。

x86架构编译及运行

切换至step5目录下,即Makefile所在的同级目录,使用如下命令编译:

make

编译的输出目录为bulid_x86

编译后使用如下命令运行:

.bulid_x86/hello_main

ARM架构编译及运行

切换至step5目录下,即Makefile所在的同级目录,使用如下命令编译:

make ARCH=arm

编译的输出目录为bulid_arm

编译后使用如下命令运行:

.bulid_arm/hello_main

清理文件

若要清理文件,也要指定架构

  1. 清理x86的编译输出,默认架构为x86,直接make clean即可:
make clean
  1. 清理arm的编译输出,需要使用ARCH=arm指定:
make clean ARCH=arm
  1. 清理所有的编译输出,可以直接使用cleanall目标:
make cleanall

最新文章

  1. 【2016-11-7】【坚持学习】【Day22】【Oracle 分页查询】
  2. C/C++回调函数
  3. 基于ADO.NET的SqlHelper类
  4. C#网络编程二:Socket编程
  5. yii2 小技巧
  6. The include feature of SQL Server Index
  7. 陈朱兴-js写法【案例】:
  8. EF DataBase First生成model的验证
  9. ie6兼容性,还需要测试么?迷茫。。。
  10. apache+php项目部署
  11. 读取FTP 图片文件,并显示,非下载
  12. 《Java大学教程》--第1章 步入Java世界
  13. Hide Data into bitmap with ARGB8888 format
  14. 看完让你彻底理解 WebSocket 原理,附完整的实战代码(包含前端和后端)
  15. DDR II中的延时参数
  16. centos7 sentry部署指南
  17. [转]nginx下的url rewrite
  18. go-ethereum
  19. 白盒静态自动化测试工具:PMD使用指南
  20. 架构师书单 2nd Edition

热门文章

  1. Qt常用UI控件读取、写入方法
  2. Mybatis框架配置讲解以及使用
  3. Spring Cloud中Eureka注册显示UNKNOWN问题
  4. Arduino系列之光照传感器(三)
  5. C语言出现 "initializer element is not constant" 错误的原因
  6. python代码迷之错误(ModuleNotFoundError: No module named 'caffe.proto')
  7. java代码之美(15)---Java8 Function、Consumer、Supplier
  8. HTML5与HTML4的区别-----文档结构
  9. 机器学习(ML)十四之凸优化
  10. [Effective Java 读书笔记] 第三章类和接口 第二十三-- ??条