非典型性C语言教程- x.3 make

2024-02-08 05:18
文章标签 语言 教程 make 典型性 x.3

本文主要是介绍非典型性C语言教程- x.3 make,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面介绍了两种IDE的使用,大部分IDE的使用都大同小异。对于C/C++来说,所有的IDE都是通过著名的make程序来管理工程的。下面简单介绍一下make。

IDE里面会有工程(project)的概念,一个工程最后构建出一个可执行体。实际上每一个工程都是用make程序来管理的。什么是make呢? 可以参考下面两个链接 Gnu的make, wiki百科的make词条。后一个连接可能需要用代理才能打开(被伟大的G*F*W*e*d了)。

在这里转中文wiki百科关于make的介绍

Make

维基百科,自由的百科全书

跳转到: 导航, 搜索

make是一个自动转化文件形式的工具,同时它也会检查文件的从属关系,如果需要的话,它会调用一些外部的软件来完成任务。它的依靠关系检查系统非常简单,主要是使用输入文件的修改时间。大多数情况下,它被用来编译源代码,生成结果代码,然后把结果代码连接起来生成可执行文件或者库文件。它使用叫做"makefile"的文件来确定一个输出文件的从属关系,然后把编译脚本程序传给shell去编译这个文件。"makefile"这个词是来自于它通常的文件名"makefile"和后来的"Makefile"

目录

  • 1 起源
  • 2 现在版本
  • 3 优点和缺点
  • 4 Makefile的结构
  • 5 makefile 例子

起源

现在有不少的从属关系检查工具,但是make是被使用最广泛的一个之一,主要是归功于它被包含在Unix系统中。Stuart Feldman 在1977年在贝尔实验室里制作了这个软件。2003年Feldman因发明了这样一个重要的工具而接受了美国计算机协会(ACM)颁发的软件系统奖。

在make诞生之前,Unix系统的编译系统主要由"make"和"install"shell脚本程序和程序的源代码组成。它可以把不同目标的命令组成一个文件,而且可以抽象化从属关系的检查和存档。这是向现代编译环境发展的重要一步。

现在版本

make程序已经被多次重写,其中包括几次用相同的文件格式和算法原理从新编写,并且添加了一些不常见的改进。三个不同的make程序是:

  • BSD make, 是从Adam de Boor的制作的版本上发展成的。它编译目标的时候有并行计算的能力。它在FreeBSD,NetBSD 和 OpenBSD 中不同程度的修改下存活了下来。
  • GNU make, 是大多数GUN Linux 安装的一部分,常常被和GNU编译系统一起使用。
  • NMAKE, Visual C++使用的编译系统。

优点和缺点

就像其他和make有着悠久历史的软件一样,它有着很多的拥护者和反对者。它的很多问题因现代大型的软件项目的出现而暴露出来。但是很多人争论说它在常见的情况下可以很好的工作,而且使用非常的简单,功能强大,表达清楚。无论如何,make仍然被用来编译很多完整的操作系统,而且现在替代品们在基本的操作上与它没有太大差别。

随着现代的集成开发环境(IDE)的诞生,特别是非Unix的平台上,很多程序员不再手动管理依靠关系检查,甚至不用去管哪些文件是这个项目的一部分,而是把这些任务交给了他们的开发环境去做。类似的,很多现代的编程语言有自己特别的高效的从属关系的设置方法。

Makefile的结构

一 个makefile是由定义一个文件或者一些规定依靠关系的文本组成。比如说,输出文件被标记着要依靠它的源文件,而源文件被标记着要依靠它内部 include的文件。在每个依靠关系都被列出来之后,一系列的文本就会来定义如何把输入文件转化成输出文件。这些定义会被称为编译脚本程序,并且被转到 shell去生成目标文件。它的基本结构是:


# Comments use the pound sign (aka hash)
target: dependencies
command 1
command 2
.
.
.
command n

makefile 文件也可以包含变量的定义和其他的makefile。makefile里面的变量可以被命令窗口调用make工具时的参数而改变。 这样就允许用户去设定编译脚本的不同功能。比如说,CC变量在makefile里面通常被用来指一个C的编译器,用户可以通过设定参数去使用不同的编译 器。

makefile 例子

下面是一个非常简单的例子。这段命令让makefile用C编译器来编译一个叫helloworld.c源文件。

helloworld: helloworld.o
cc -o $@ ___FCKpd___1lt; helloworld.o: helloworld.c cc -c -o $@ ___FCKpd___1lt; .PHONY: clean clean: -rm -f helloworld helloworld.o



当C 语言编写的软件规模很大时,将整个程序完整的编译出来,有时需要很多步骤,可能需要编译上10万个源文件,还有额外的拷贝,建文件等步骤,有时有些头文件 和源文件还需要其他的自动生成工具生成。手工敲一个一个编译命令会让人发疯。这是需要写一个批处理脚本,自动的执行大量的编译命令。make实际上就是这 么一个脚本工具的增强版本。 上面提到,make会自动检查依赖关系。

make是一个工具,make工具执行时需要一个makefile 文件。这个Makefile文件和Unix脚本一样可以使用宏变量,管道,条件分支,循环等一系列复杂的语法,还可以使用一切shell可以执行的程序。 看一看Linux内核的make文件就知道make可以写到多么复杂了。

这篇关于非典型性C语言教程- x.3 make的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/690006

相关文章

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本