make、makefile、cmake、nmake

server/2024/9/25 10:31:30/
  1. GCC:即GNU Compiler Collection(GNU编译器套件),可简单认为是编译器。它可以编译很多种编程语言(如C、C++、Objective-C、Fortran、Java等)。当程序只有一个源文件时,直接就可以用gcc命令编译它。

    但是若程序包含多个源文件,用gcc命令逐个去编译显然很容易混乱且工作量大,所以就出现了下面的make工具
  2. make:可以看作一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式,通过调用makefile文件中用户指定的命令来进行编译和链接
  3. makefile:make工具就像指挥家,根据makefile这个乐谱来指挥整个乐团如何演奏。即make工具根据makefile中的命令进行编译和链接,makefile命令中包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。

    makefile在一些简单的工程完全可以人工拿下,但当工程非常大时,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。这时候就出现了cmake这个工具
  4. cmake:cmake就可以更加简单地生成makefile文件给上面的make用。当然cmake还有其他更加牛的功能,就是可以跨平台生成对应平台能用的makefile,我们就不用自己去修改了。
    • cmake根据什么生成makefile:cmake需要根据一个叫CMakeLists.txt的文件(学名:组态档)去生成makefile
  5. CMakeLists.txt:需要自己手写
  6. nmake:nmake是Microsoft Visual Studio中的附带命令,需要安装VS,实际上可以说相当于linux的make
  7. 总结流程:
    • 用编辑器编写源代码,如.c文件
    • 用编译器编译代码生成目标文件,如.o
      • 如果源文件太多,一个个编译就太麻烦了。于是人们想到设计一种类似于批处理的程序,来批处理编译源文件
      • 于是就又了make工具,它是一个自动化编译工具,可以用一条命令实现完全编译
      • 但又需要编写一个规则文件,make依据它来进行批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的功能
      • 对于一个大工程,编写makefile文件也很复杂,这时人们又想到设计一个工具,可以读入所有源文件之后自动生成makefile
      • 于是就出现了cmake。cmake能输出各种各样的makefile或project文件,从而帮助程序员减轻负担。cmake中有很多设置库的,此时还不是可执行文件,make生成后才是二进制可执行文件
      • 但cmake需要依据一个规则来生成makefile,这就是cmakelists文件
    • 用链接器链接目标代码生成可执行文件,如.exe

http://www.ppmy.cn/server/36436.html

相关文章

expdp突然变非常慢

检查日志expdp日志,发现已经表都已经基本上导出完成,都是0 KB 0 rows,就没是导出完成的标识。检查dba_datapump_jobs发现expdp任务还在执行中。 检查v$session,发现存在等待事件“Streams AQ: Enqueue Blocked On Low Memory” …

管理能力学习笔记九:授权的常见误区和如何有效授权

授权的常见误区 误区一:随意授权 管理者在授权工作时,需要依据下属的能力、经验、意愿问最自己:这项工作适合授权给Ta做吗?如果没有,可以通过哪些方法进行培训呢? 误区二:缺乏信任 心理暗示…

【报错】spark序列化报错:Kryo serialization failed: Buffer overflow

文章目录 spark序列化报错问题解决 spark序列化报错 org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow. Available: 0, required: 61186304. To avoid this, increase spark.kryoserializer.buffer.max value.at org.apache.spark.serializer.Kry…

mac执行python3 --version报错

报错问题:在Mac系统中执行python3 --version时报错。 可能的解释: Python未安装或未正确安装。 系统变量设置不正确,导致命令行无法找到python3命令。 解决方法: 检查Python是否安装:在终端执行python3 --version或…

Kettle连接Mysql数据库时报错——Driver class ‘org.gjt.mm.mysql.Driver‘ could not be found

一、问题描述 当我们使用ETL工具Kettle需要连接Mysql数据库进行数据清洗操作,在配置好Mysql的连接串内容后,点击【测试】按钮时报错【错误连接数据库 [MysqlTestConnection] : org.pentaho.di.core.exception.KettleDatabaseException: Error occurred while trying to conne…

编程语言的动态内存管理 new 和 delete malloc和free

C:new 和 delete 在C中,new 和 delete 是一对操作符,用于动态地在运行时分配和释放内存。它们是进行堆内存管理的关键工具,在程序运行过程中灵活地调整数据结构的大小。 new 的使用 分配单个对象的内存: 类型名 *指针变量名 ne…

使用IIS部署Vue项目

前提 使用IIS部署Vue项目,后端必须跨域,不要在Vue中用proxy跨域,那个只在dev环境中有用! IIS安装,不用全部打勾,有些他默认就是方块 ■ 选择性安装的,就维持原样就可以。 添加网站配置 右键…

长难句打卡5.6

For H&M to offer a $5.95 knit miniskirt in all its 2,300-plus stores around the world, it must rely on low-wage overseas labor, order in volumes that strain natural resources, and use massive amounts of harmful chemicals. 翻译:H&M若要在其全球总共2…