Linux下gcc/g++、make和cmake的区别

本文详细介绍了从源代码生成可执行文件的过程,包括编辑、编译、链接等步骤,以及在Linux环境下如何利用.gcc和.g++进行C/C++文件的编译。同时,探讨了自动化编译工具make和makefile的使用,以及如何通过cmake简化大型项目中的编译流程。

文本程序到可执行文件生成无论在什么平台大致分为以下几个部分: 
  1.用编辑器编写源代码,如.c文件。 
  2.用编译器编译代码生成目标文件,如.o。 
  3.用链接器连接目标代码生成可执行文件,如.exe。 
  Linux平台下,.o文件一般是通过编译的但还未链接的目标文件,.out文件一般都是经过相应的链接产生的可执行文件(linux下)。当然这是一般情况下人们这么设置,而真正的,在linux中 .o通常保存的是可执行代码 ,至于可执行文件则没有规定扩展名,用的是文件属性位来决定的是否可执行。在chmod中设置。 
  我们知道编译和链接阶段是靠g++和gcc编辑器来完成,这两个编译阶段是相同的,但是链接阶段g++默认链接c++库,所以一般情况下用gcc编译c文件,而g++编译cpp文件。当然g++也可以编译c文件,而gcc编译cpp文件则需要在后面加上参数-lstdc++,作用就是链接c++库。 
  但是如果编译和链接的阶段如果源文件太多,一个一个编译时就会特别麻烦,于是人们想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的技能。 
  对于一个大工程,编写makefile实在是件复杂的事,于是人们又想,为什么不设计一个工具,读入所有源文件之后,自动生成makefile呢,于是就出现了cmake工具,它能够输出各种各样的makefile或者project文件,从而帮助程序员减轻负担。但是随之而来也就是编写cmakelist文件,它是cmake所依据的规则。所以在编程的世界里没有捷径可走,还是要脚踏实地的。 
  原文件—cmakelist —cmake —makefile —make —生成可执行文件(make中则包含了多条链接以及gcc/g++编译语句)。 
  参考自下面博文: 
  http://blog.sina.com.cn/s/blog_74a459380102uxlz.html


--------------------- 
作者:无鞋童鞋 
来源:优快云 
原文:https://blog.youkuaiyun.com/FX677588/article/details/53159019 
版权声明:本文为博主原创文章,转载请附上博文链接!

### 功能介绍与区别对比 #### GCCG++ GCC(GNU Compiler Collection)是一个支持多种编程语言的编译器集合,包括 C、C++、Java、Fortran、Pascal、Objective-C Ada 等。它不仅是一个编译器,还提供预处理、汇编链接等完整编译流程的支持。其中,`gcc` 是 GCC 中用于编译 C 语言的工具,而 `g++` 是用于编译 C++ 语言的工具。虽然两者都属于 GCC,但它们在处理 C++ 代码时有显著区别。例如,`g++` 在编译 C++ 文件时会自动链接标准模板库(STL),而 `gcc` 不会,因此在使用 `gcc` 编译 C++ 程序时需要手动添加 `-lstdc++` 参数以链接 STL 库 [^4]。 #### MakeCMake `make` 是一个用于自动化构建项目的工具,它通过读取名为 `Makefile` 的文件来执行编译任务。`Makefile` 类似于乐谱,定义了如何编译链接各个源文件,以及它们之间的依赖关系。`make` 工具根据这些规则依次执行编译命令,从而高效地构建项目 [^2]。 `CMake` 则是一个跨平台的构建系统生成器,它的主要功能是生成适用于不同平台的构建配置文件(如 `Makefile` 或 Visual Studio 项目文件)。与 `make` 相比,`CMake` 提供了更高层次的抽象,使得开发者可以通过简单的配置文件(通常是 `CMakeLists.txt`)来描述项目的构建逻辑,而无需关心底层的具体编译器或平台细节 [^1]。 #### GCC/G++Make区别 `gcc` `g++` 是具体的编译器,负责将源代码转换为目标代码。而 `make` 是一个构建工具,它并不直接参与编译过程,而是通过解析 `Makefile` 文件中的规则来调用 `gcc` 或 `g++` 进行编译。`make` 的优势在于它能够智能地判断哪些文件已经修改,从而只重新编译受影响的部分,提高构建效率 。 #### MakeCMake区别 `make` 本身不具有跨平台能力,其 `Makefile` 文件通常需要针对特定平台进行调整。相比之下,`CMake` 可以生成适用于多种平台的构建文件,例如在 Linux 上生成 `Makefile`,在 Windows 上生成 Visual Studio 项目文件。这种灵活性使得 `CMake` 成为大型跨平台项目常用的构建工具 [^1]。 #### 示例代码 以下是一个简单的 `CMakeLists.txt` 文件示例,展示了如何使用 `CMake` 来配置一个 C++ 项目的构建过程: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True) add_executable(MyExecutable main.cpp) ``` 在这个例子中,`CMakeLists.txt` 定义了一个最小的 CMake 版本要求,项目名称,C++ 标准版本,并指定了要生成的可执行文件及其对应的源文件 。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值