使用GCC和Makefile编译c文件

2023-11-04

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 删除命令

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用GCC和Makefile编译c文件 的相关文章

随机推荐

  • Java学完SSM后很迷茫,接下来该学哪些呢?

    没必要跟着别人的学习路线图走 你要清楚你的目的是找工作 写过很多次大学的四年安排 今天这篇专门写给大四即将找工作的同学 一 找什么工作 首先分析自己想干什么 以题注说的是Java为主 那么起码要知道找一个Java开发的工作需要什么能力 基本
  • postgresql 中的COALESCE()函数使用小技巧

    这篇文章主要介绍了postgresql 中的COALESCE 函数使用小技巧 具有很好的参考价值 希望对大家有所帮助 一起跟随小编过来看看吧 场景 存在一个用户白名单表 提供了此用户的用户名和地区信息 判断此用户是否在此白名单表中 如 姓名
  • Spring Boot 获取接口调用者的IP

    需求 我们实现一个登陆功能时 可能会有需要记录登陆者IP的需求 用于系统安全分析或账户来源分析 当然还有更多应用场景 工具类如下 来源于网络 已兼容K8S 代理的情况 import org slf4j Logger import org s
  • 树莓派解决 vim 编辑器中文乱码问题

    目录 1 问题由来 2 乱码问题演示 3 解决方案 4 问题解决 1 问题由来 我们用树莓派做项目的时候经常需要在电脑编写程序代码 然后再把代码移植进树莓派进行运行 我们用电脑编写程序的时候避免不了都会写很多中文注释 当我们把 file c
  • 【BEV Review】论文 Delving into the Devils of Bird’s-eye-view 2022-9 笔记

    背景 一般来说 自动驾驶车辆的视觉传感器 比如摄像头 安装在车身上方或者车内后视镜上 无论哪个位置 摄像头所得到的都是真实世界在透视视图 Perspective View 下的投影 世界坐标系到图像坐标系 这种视图与人类的视觉系统很类似 因
  • 表单数据自动封装到javaBean中

    页面表单数据的自动封装到javaBean中 先定义一个Bean类 package com test public class Bean private String name private Integer sex public Strin
  • AD19铺铜操作

    1 在Keep OUT层沿板子边缘画出板子形状 2 PCB设计界面右上角 设置 PCB Editor General 勾选 铺铜修改后自动重铺 3 铺铜之前 打一些过孔 连接板子上下两层 双层板 并设置为GND网络 右边Properties
  • 复制文件夹所有内容 和 删除整个文件夹的2个函数

    选择自 hycapril 的 Blog 实现一个静态方法将指定文件夹下面的所有内容copy到目标文件夹下面 如果目标文件夹为只读属性就会报错 April 18April2005 In STU public static void CopyD
  • keil4 破解心得

    keil4 破解心得 Obj STM32 FD SDCard MP3 axf error L6047U The size nb 在编译时出现 Obj STM32 FD SDCard MP3 axf error L6047U The size
  • bes2300之环境搭建(一)

    目录 环境搭建 sdk文件结构介绍 编译 烧录 配置烧录选项 选择端口 启动升级 简单使用 环境搭建 安装编译工具链 gcc arm none eabi 4 9 2014q4 20141203 win32 exe make 3 81 exe
  • GPIO工作模式

    参考链接 STM32 STM32F4 GPIO八种模式及工作原理详解 Z小旋 CSDN博客 stm32io口的八种工作模式 GPIO 即通用I O 输入 输出 端口 是STM32可控制的引脚 STM32芯片的GPIO引脚与外部设备连接起来
  • [备忘]域用户登陆出现“此工作站和主域间的信任关系失败”错误解决方法

    症状 登陆域用户 出现错误 此工作站和主域间的信任关系失败 并无法登陆 解决方案 1 使用本地用户登录 更改当前 域 为 工作组 如默认的WORKGROUP等 并输入具有域管理权限的用户名 密码 随后此电脑上的 域 将会被删除 2 重启电脑
  • Flink入门看完这篇文章就够了

    文章目录 第一章 概述 第一节 什么是Flink 第二节 Flink特点 第三节 Flink应用场景 第四节 Flink核心组成 第五节 Flink处理模型 流处理和批处理 第六节 流处理引擎的技术选型 拓展 什么是最多一次 最少一次和仅一
  • 算法基础之数组理论

    算法基础之数组理论 1 前言 2 数组基础定义 3 数组增删改查 3 1基本功能 3 2添加元素 3 3查询和修改元素 3 4包含 搜索和删除元素 3 5其他 3 6检验 4 动态数组及其时间复杂度 4 1动态数组的实现 4 2增删改查时间
  • 阿里云通义千问向全社会开放,近期将开源更大参数规模大模型

    9月13日 阿里云宣布通义千问大模型已首批通过备案 并正式向公众开放 广大用户可登录通义千问官网体验 企业用户可以通过阿里云调用通义千问API 通义千问在技术创新和行业应用上均位居大模型行业前列 IDC最新的AI大模型评估报告显示 通义千问
  • 【YModem】YModem串口IAP升级例程+YModem串口工具

    目录 YModem协议传输的过程 IAP例程 YModem串口工具 YModem技术手册 手把手教你如何实现自动固件更新 YModem协议是由XModem协议演变而来的 每包数据可以达到1024字节 是一个非常高效的文件传输协议 Ymode
  • ChatGPT多场景应用之基本应用

    人工智能 AI 无疑是近年来最流行和最先进的技术之一 生成式 AI模型正在促进众多任务 实现效率和自动化 目前 ChatGPT是风靡互联网的主要生成人工智能模型 据 Similar Web 称 自 2022 年 11 月发布以来 其访问量已
  • 【c语言五子棋】自定义类型五子棋/井字棋:胜负判断

    一 算法思路 由于五子棋规则比较简单 我们可以胜负判断分为以下几个方面分别判断 1 横向判断 2 竖向判断 3 斜向判断 从左下到右上 4 斜向判断 从左上到右下 二 算法原理 算法来源 参考字符串匹配的处理方法 具体可以参考 从头到尾彻底
  • 腾讯COS,Cloudbase API用法教程详细

    Chinar blog www chinar xin 腾讯云 COS Cloudbase API 本文提供全流程 中文翻译 Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无限可能 Chinar 心分享 心创新 助力快速
  • 使用GCC和Makefile编译c文件

    Ubuntu下使用GCC和Makefile编译c文件 目录 Ubuntu下使用GCC和Makefile编译c文件 前言 一 GGC命令行模式 1 vim创建文件 2 gcc编译 1 编译出目标文件 2 链接为可执行文件 3 运行 二 VS2