热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【转】Makefile步步为营

Makefile步步为营本目录主要包含Makefile一步步递进学习的示例代码makefile代码实例:https:www.lanzous.comi9m9npistep

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

推荐阅读
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • 源码安装Nginx 解决报错
    CentOS8源码安装Nginx编译安装注意事项如果安装时不是使用的默认路径,则必须要修改PATH环境变量,以能够识别此程序的二进制文件路径 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
author-avatar
手机用户2602930681
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有