IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 使用GCC和Makefile编译c文件 -> 正文阅读

[C++知识库]使用GCC和Makefile编译c文件

Ubuntu下使用GCC和Makefile编译c文件


前言

本文是熟悉并掌握在Linux系统中GCC和Makefile两种方式编译连接并运行c程序,并在windows操作系统上选择一种编译工具运行程序,体会两者的异同。


一、GGC命令行模式

预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删掉,这里并不会检查语法;
编译:检查语法,将预处理后的文件编译成汇编文件;
汇编: 将汇编文件生成目标文件(二进制文件);
链接: C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到可执行程序中去。

在这里插入图片描述

GCC命令操作
gcc-E只进行预处理
gcc-S只进行预处理和编译
gcc-c只编译并生成目标文件
gcc-o 生成指定文件名的可执行文件

1.vim创建文件

创建sub1.c以及sub1.h

vim sub1.h
#ifndef _SUB1_H
#define _SUB1_H
float x2x(int a, int b);
#endif
vim sub1.c
#include <stdio.h>
#include “sub1.h”
float x2x(int a, int b)
{
        return (float)(a+b);
}

创建main.c文件

vim main.c
#include <stdio.h>
#include "sub1.h"
int main()
{
        int x=2, y=9;
        float sum;
        sum=x2x(x,y);
        printf("%0.2f\n",sum);
}

2.gcc编译

参考

如果只有单个文件,一般直接执行下面这条命令就可以进行编译了。
执行命令:gcc 文件名.c -o 目标文件名. 如果目标文件名不写,则默认编译出a.out的目标文件(Linux环境下)。

但是并不是想要一次性得到最终的.out文件,而是需要得到编译过程中的一些中间文件,例如汇编代码文件,那么就需要分步编译了。

1.编译出目标文件

gcc -c sub1.c 
gcc -c main.c 

2.链接为可执行文件

将多个目标文件链接为名为run的可执行文件

gcc main.o sub1.o -o run

3.运行

./run

二、VS2019编译main.c

1.编写main.c和sub1.c文件

在这里插入图片描述
使用extern关键字声明
使用c语言中extern关键字声明*x2x()*是来自外部其他c程序所定义的函数。

2.执行程序

在这里插入图片描述


三、Makefile方式

1.规则

      target... : prerequisites ...

      command

      ...

      ...
     -------------------------------------------------------------------------------

   target也就是一个目标文件,可以是Object File,也可以是执行文件,还可以是一个标签。

   prerequisites就是,要生成那个target所需要的文件或是目标。

   command也就是make需要执行的命令。(任意的Shell命令)

而Makefile文件就是将上述编译步骤写进一个文件,在makefile文件中遵守上述规则,就可以使用make命令生成最后的可执行文件,一步到位。

2.创建makefile文件

在这里插入图片描述
使用vim编辑器创建一个makefile文件,并在文件中输入gcc命令行模式对应的操作,编辑完成后保存退出。
最后clean是如果不需要生成的目标文件和可执行文件,使用make clean 即可删除。

3.运行结果

在这里插入图片描述

使用make clean 删除命令

在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:37:21  更:2021-09-11 18:38:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:06:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码