使用makefile编译多个文件(.c , .cpp , .h等)

Posted ???

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用makefile编译多个文件(.c , .cpp , .h等)相关的知识,希望对你有一定的参考价值。

有时候我们要一次运行多个文件,这时候我们可以使用Makefile!!!

◊make是什么?

 

   make是一个命令工具,是一个解释makefile中指令的命令工具。它可以简化编译过程里面所下达的指令,当执行 make 时,make 会在当前的目录下搜寻 Makefile (or makefile) 这个文本文件,执行对应的操作。make 会自动的判别原始码是否经过变动了,而自动更新执行档。

 

◊为什么要使用make?

 

   假设,现在一个项目里面包含了100个程序文件,如果要对这个项目进行编译,那么光是编译指令就有100条。如果要重新进行编译,那么就又得像之前一样重新来一遍。这样重复且繁琐的工作实在是让我们很不爽啊。所以,用make来进行操作,间接调用gcc岂不是很方便?如果我们更动过某些原始码档案,则 make 也可以主动的判断哪一个原始码与相关的目标文件档案有更新过, 并仅更新该档案。这样可以减少重新编译所需要的时间,也会更加方便。

 

◊makefile又是干什么的?

 

   makefile其实就是一个文档,里面定义了一系列的规则指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,它记录了原始码如何编译的详细信息! makefile一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

 

  先看一下makefile的规则:

 

    目标(target):目标文件1 目标文件2

 

     <Tab>gcc -o 欲建立的执行文件 目标文件1 目标文件2

先举一个运行多个c语言文件。

首先下面是一个完整的 c语言文件,实现了统计用户输入的字符串中大小写字母的个数

#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>

void test(){
char str[50]={0};
scanf("%s",str);
int m=0;
int n=0;
pid_t p=fork();
if(p<0){

printf("fork failed");
}

if(p == 0){

for(int i=0;i<sizeof(str);i++){


if( str[i]<=\'Z\'&& str[i]>=\'A\'){
m++;
}
}

printf("大写字母一共有");
printf("%d",m);
printf("个");
}
if(p>0){

for(int i=0;i<sizeof(str);i++){
if(str[i]>=\'a\' && str[i]<=\'z\'){
n++;
}
}
printf("小写字母一共有");
printf("%d",n);
printf("个");
}
}
int main()
{
test();
return 0;
}

 此时我们可以把该文件拆成三份,一份是.h文件,用来放头文件等信息,另外两个是.c文件,一个用来放main方法,一个放声明的函数,如下三图

 

 

 则在终端进行一下操作

 

 成功运行多个文件

下面介绍运行cpp文件,大致步骤相同。

一个 cpp文件写成多份的形式

 

 

 

 

稍微注意的就是gcc 和g++的使用。

 

以上是关于使用makefile编译多个文件(.c , .cpp , .h等)的主要内容,如果未能解决你的问题,请参考以下文章

5makefile

利用makefile实现c语言项目编译

使用Makefile编译多个c源代码的方法

Makefile常用写法

Makefile常用写法

Linux下多个.c文件的编译和Makefile文件