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 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux使用gcc和makefile分别编译程序 -> 正文阅读

[系统运维]Linux使用gcc和makefile分别编译程序

一、目的

编写一个主程序main1.c和一个子程序文件sub1.c,sub1.c里包含一个运算函数,main1.c引用sub1.c文件分别在Ubuntu系统用gcc编译运行、在Windows用编译工具运行和在Ubuntu系统用makelife方式编译运行。

二、编译运行

2.1、代码展示

Ubuntu里写代码的方式又很多,可以打开命令行用vim,也可以自己下载编程软件,本文Ubuntu的有关操作都在vscode里完成
sub1.h:

#ifndef _SUB1_H
#define _SUB1_H

#include<stdio.h>
float x2x(int a,int b);

#endif

sub1.c:

#include"sub1.h"
float x2x(int a,int b){
    float ans;
    ans=(float)b/a;
    return ans;
}

main1.c:

#include"sub1.h"
int main(){
    int x=2,y=9;
    printf("%.2f\n",x2x(x,y));
    return 0;
}

2.2 Ubuntu里用gcc编译运行

Step1:用 gcc -c sub1.c 生成sub1.o文件
Step2:用 gcc main1.c sub1.o -o main1 (该步骤是将main1.c文件编译为mian1.o文件,然后链接sub1.o文件生成main1可执行文件)
步骤三:执行 ./main1命令,执行刚刚生成的main1可执行文件。
如下图:
在这里插入图片描述

2.3 在Windows里用编译器里运行(vscode)

第一反应应该都是把代码复制过去运行,但第一时间可能不行,会出现函数未定义,需要改一下步骤
Step1:进入到拓展页面,找到code runner,鼠标右键点击拓展设置,如下图:
在这里插入图片描述
Step2:找到executor map,点击在settings.json设置
在这里插入图片描述
Step3:
找到
“c”: “cd $dir && gcc $fileName -o $fileNameWithoutExt && d i r dir dirfileNameWithoutExt”,
将$fileName改为*.c,建议复制下来操作,将原来那一份注释掉就行了
在这里插入图片描述
这样就可以运行啦,结果如下:
在这里插入图片描述

2.4 在Ubuntu系统里用makefile方式运行

2.4.1 make简介

make是一个工程管理器,就是一个自动化编译管理器,这里的自动指它能狗根据文件时间戳自动发现更新过的文件二减少编译的工作量,同时它通过读入Makefile文件的内容来执行大量的编译工作。

2.4.2 makefile简介

makefile是make读入的唯一配置文件
由make工具创建的目标体(target),通常是目标文件或可执行文件
要创建的目标体所依赖的文件(dependency_file)
创建每个目标体时需要运行的命令(command)
注意:命令前必须是一个“TAB键”,否则编译错误为:*** missing separator. Stop.
makefile格式:

target : dependency_files ##dependency_files是依赖的文件
	command #注意是一个TAB

想了解更多可以到大佬的博客:makefile从入门到放弃——博主吐血整理的笔记

2.4.3 makefile文件里的内容

shell里的命令前面都是tab分隔,如果提到上述出现的错误可以多用几个编译器试试

main1:sub1.o main1.c
	gcc main1.c sub1.o -o main1
sub1.o:sub1.c
	gcc -c sub11.c -o sub1.o
clean:
	rm *.o

2.4.4 运行

到这一步就很简单了,直接在命令行进到makefile文件所在文件夹,输入make就行,不过得先把先前生成的main1执行文件删掉,不然就会提醒make: ‘main1’ is up to date。
结果如下图:
在这里插入图片描述

三、总结

今天使用了gcc、windows里的编辑器和makefile分别对相同程序进行了编译运行。用gcc可以知道每一步的变化,可以帮助我们对程序编译的过程理解的更深,但操作其实比较繁琐,而在编译器里却是一步到位,很方便,但我们对其中发生了什么却不得而知,而makefile方式更像是让我们自己弄一个ide,让其中的过程全自动化,不过过程怎么样是我们自己编写,同时makefile文件格式要求很严格,如果出现格式错误是用不了的,tab分隔符之后才能被识别为shell命令,切记!!!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:47:18  更:2021-09-14 13:48:15 
 
开发: 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/15 16:37:27-

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