刚开始使用linux环境编程时,遇到的一个难办问题,就是当时觉得在一个c文件里实现太多函数特别繁琐,并且后期因为函数实现部分篇幅太长,使得整个c很难看清楚思路,后来想着函数单独放在一个c文件里,没想到编译出了问题,查资料发现要用makefile,当时写了日志,把当时代码po上来做一个参考。

实例
此处例子涉及三个文件,两个c文件,一个头文件,分别为:fun.c a.c fun.h
1.fun.h是定义函数名的头文件

//fun.h
#ifndef _FUN_H
#define _FUN_H
#include"fun.h"
int fun1(int a,int b);
void fun2();
#endif

2.fun.c是实现fun.h里定义了的函数

//fun.c
#include<stdio.h>
#include"fun.h"
int fun1(int a,int b){
    return a+b;
}
void fun2(){
    printf("fun2 is ok!\n");
}

3.a.c是调用fun里的函数的主文件

//a.c
#include<stdio.h>
#include"fun.h"
int main(){
    int c;
    int a=2,b=6;
    c=fun1(a,b);
    printf("a=%d b=%d\n a+b=%d\n",a,b,c);
    fun2();
    return 0;
}

在同一个文件夹里创建好这三个文件后(我放在~/MINEcode/exm文件夹里)
为了方便一同编译,在这个文件夹里同时创建一个文件,名为makefile(注:文件名一定要是这个,make默认编译的就是这个名字的文件)

//makefile
A:fun.o a.o 
    gcc -o A fun.o a.o
fun.o:fun.c fun.h
    gcc -c fun.c
a.0:a.c fun.h
    gcc -c a.c
clean:
    rm A fun.o a.o

保存后,在shell端执行以下命令

$ cd ~/MINEcode/exm
$ make

(显示gcc相关编译语句)

$ ./A

(./A是因为我在makefile文件内就把编译后的命令命名为A,这个文件名可以随自己的makefile文件自己修改)

Logo

更多推荐