真的了解构建工具了吗???

来自微信公众号:wu的学习笔记

01

前言

我们真的了解什么是构建工具吗?为什么需要构建工具?

02

Why构建工具?

当我们编写程序时,需要使用一种特定的编程语言来表达程序的逻辑。然而,计算机只能理解机器语言,因此需要将编程语言转换为机器语言,这个过程就是编译。编译器是一种程序,它将高级语言编写的源代码转换成目标机器上可执行的机器语言。

我们不用构建工具只使用编译工具也可以正常进行代码编译。如果一个工程有1000个文件,那么我们还需要用写1000个命令行编译文件吗?显然是不用的!

 
 

gcc Helloworld.c -o Helloworld

构建工具帮了我们大忙!!!编译器构建工具是用来构建编译器的工具,它们可以帮助编译器的开发者有效地对编译器进行管理。

常见的编译器构建工具包括自动构建工具CMake、Make、Ninja等。这些工具可以根据源代码和相应的Makefile或者ninja.build文件自动构建程序。构建工具可以帮助我们不用一行行的敲命令行进行编译,简化了我们的编译脚本的编写。

所以,构建工具就是帮助我们生成编译器编译代码的命令,并且调用编译器执行相关编译命令。

03

CMake工具

先破除两个认知误区:

  1. CMake工具不直接调用编译器!!!!!

  2. CMake不仅仅支持make构建工具也支持ninja构建工具!!!!!

回答第一个误区问题:CMake默认使用make工具调用编译器。

回答第二个误区问题:CMake可以使用-G参数指定其他构建工具,比如说ninja。

CMake仅仅是为了生成make或者ninja构建工具的对应的构建文件。

04

make工具

Make工具可以直接调用编译器,在编译过程中,会有相关信息打印出来。

make工具命令行参数的相关解释如下:

  • -b,-m参数可以忽略兼容性

  • -B参数无条件编译所有目标

  • -C参数=路径,特指进入到指定路径下进行编译

  • -d参数打印debug信息

  • --debug参数=标志,特指打印多个debugging信息

  • -e参数特指环境变量覆盖makefile文件中的变量

  • --eval=string参数特指参数解析成字符串并给到shell执行

  • -f参数指读取一个文件作为makefile文件

  • -i参数忽略错误

  • -I参数特指寻找包含的Makefile文件路径

  • -j参数指打开多少个线程进行编译

  • -k参数特指尽管有些目标无法被编译但是编译会继续进行

  • -l参数特指负载低于N之后开启多线程编译

  • -L参数特指使用mtime

  • -n参数特指输出打印所有执行命令,但是不执行

  • -o=某某文件,特指将某个文件认为是有变动的文件,方便重新编译

  • -O参数指定输出目录

  • -p:显示make的内部数据库。

  • -q:安静模式,不执行任何命令,只显示出来。

  • -r:禁用内置的隐含规则。

  • -R:禁用内置变量设置。

  • -s:不回显命令。

  • -S:显示当前目录。

  • -t:创建目标,而不是改造它们。

  • -v:显示详细信息。

  • -w:显示所有命令。

  • -W:在符号链接和目标之间使用最后的修改时间。

05

ninja工具

ninja工具的作用和make工具是类似的,也是用于调用编译器编译程序,一般来说,在汽车电子领域中,ninja大多用于编译C++,它可以加快C++的编译速度。

在Linux中,可以使用sudo apt-get install ninja-build安装ninja工具。

当我们使用cmake工具和ninja工具联合构建工程时,使用cmake命令行中尾加“-G Ninja”指令可以指定ninja为构建工具,而不是默认的make工具,cmake会生成ninja的构建脚本ninja.build相关文件,之后再调用ninja工具即可构建成功。

ninja工具命令行参数的相关解释如下:

  • --version参数:特指显示版本

  • -v参数:显示所有构建时的命令行参数

  • -C参数=路径,特指进入到指定路径下进行编译

  • -f参数指读取一个文件作为build.ninja文件

  • -j参数指打开多少个线程进行编译

  • -k参数特指尽管有些目标无法被编译但是编译会继续进行,直到第N个任务也失败

  • -l参数特指负载低于N之后开启多线程编译

  • -n参数特指输出打印所有执行命令,但是不执行

  • -d参数打印debug信息

  • -t参数用于执行特定的任务,通常是清理构建的输出

  • -w 参数在Ninja构建系统中用于指定警告的行为。它允许你控制Ninja在遇到警告时是否继续执行构建。

添加图片注释,不超过 140 字(可选)

END

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值