Ubuntu 18.04中C语言的编译以及Makefile的编写

一、Windows中的C语言程序运行

编写sub.h文件:
在这里插入图片描述


编写main1.h:
在这里插入图片描述


编译并运行:
在这里插入图片描述


二、在Ubuntu18.04下编译并运行

编写sub.h:

float x2x(int a, int b){
	return 2.0 * (a + b);
}

编写main1.c:

#include <stdio.h>
#include "sub.h"

int main(){
	int x = 4;
	int y = 23;
    float z = x2x(x, y);
    printf("z is %f\n", z);
    return 0;
}

使用gcc编译并运行:
在这里插入图片描述


三、以Makefile进行编译

1.Makefile概述:

Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。在 Linux(unix )环境下使用GNU 的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入一些时间去完成一个或者多个称之为Makefile 文件的编写。

所要完成的Makefile 文件描述了整个工程的编译、连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。尽管看起来可能是很复杂的事情,但是为工程编写Makefile 的好处是能够使用一行命令来完成“自动化编译”,一旦提供一个(通常对于一个工程来说会是多个)正确的 Makefile。编译整个工程你所要做的事就是在shell 提示符下输入make命令。整个工程完全自动编译,极大提高了效率。

make是一个命令工具,它解释Makefile 中的指令。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样。而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile在绝大多数的IDE 开发环境中都在使用,已经成为一种工程的编译方法。

2.makefile规则:

target… : prerequisites …
command



target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。


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

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

3.编写makefile并执行:

首先添加sub.c文件:

#include "sub.h"

float x2x(int a, int b){
        return 2.0 * (a + b);
}

修改sub.h文件:

#ifndef __SUB_H
#define __SUB_H


float x2x(int a, int b);
#endif

编写makefile文件:

main1: main1.o sub.o
        gcc main1.o sub.o -o main1

main1.o: main1.c
        gcc -c main1.c

sub.o: sub.c
        gcc -c sub.c

clean:
        rm main1 *.o

执行:
在这里插入图片描述


四、总结

Linux中,可对c程序使用gcc进行编译,也可用makefile对多个文件或项目进行编译。

参考:
Ubuntu16.04下C语言的编译及makefile的应用
Ubuntu系统使用gcc和Makefile编译C程序
makefile 编译Linux C/C++项目快速入门

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Baker_Streets

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值