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++项目快速入门