您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页Makefile小实验

Makefile小实验

来源:五一七教育网

文章目录

目的

简单的对Makefile进行的回顾,利用Makefile工具,方便程序的管理。同时对动态库的制作,链接等操作进行实际的展示

构造项目框架

这里只是一个较小的实验项目,所以我们就根据功能的设定进行建立文件。

目录结构

编写c程序

功能函数
function.c

#include <function.h>
  2
  3 int add(int a,int b){
  4         return a+b;
  5 }
  6
  7 int sub(int a,int b){
  8         return a-b;
  9 }

main.c

#include<function.h>
int main(){
                int a=10;
                int b=5;

                printf("a+b=%d
",add(a,b));
                printf("a-b=%d
",sub(a,b));
                return 0;
}

编写头文件

#ifndef _FUNCTION_H_
#define _FUNCTION_H_
#include<stdio.h>
extern int add(int a,int b);
extern int sub(int a,int b);
#endif

第一次编译

gcc -o build function.c main.c -I ../include/

生成ELF可执行文件build并查看

执行build

第一次改进:制作动态链接库

通过分析上面的程序逻辑,我们可以知道main.c通过调用function.c中的函数来实现加法和减法。函数的声明在function.h头文件中进行声明。由main.c调用,function.c来实现。因此,我们可以清楚gcc编译器在编译的时候,将我们的main.c和function.c还有function.h都是放进了的。

为了方便代码的移植,提高程序执行速度。我们就想到了通过制作库文件的方法来提高程序的执行效率,实现协作共用。

制作动态链接库

这里就不制作静态库了。一般不用,而且方法一样,只是制作的指令不同

使用指令制作动态库libfunction.so

gcc function.c -fPIC -shared -o libfunction.so  -I ../include/

编译,生成可执行程序

 gcc -o build main.c -I ../include/ -L ../lib/ -lfunction -Wl,-rpath ../lib/

运行build程序

究极改进(Makefile的引入)

Makefile的引入

设想以下,如果我们的某个程序,function.c或者main.c突然想要再增加一个功能,或者再改进一下,用一个更好的算法。那岂不是我们就又要把之前的指令就又都给敲一遍,而往往我们的编程不可能总是一步到位,是需要经过多次调试和该进的,所以按目前的这个思路岂不是会让我们的开发效率变得异常的低下,需要我们把时间浪费反复敲这些指令上。显然这种车间工作我们是不愿意干的!
没错,大家肯定会想到可以用shell脚本啊!没错,这确实是一个比较好的办法,为什么是比较好呢?
设想一下,如果我们只有一个文件想要改一下,其他文件我并没有改,但是使用shell脚本就会使得我们把每一个文件都编译一次。又有同学会说,可以用if语句进行判断呀,可是如果文件很多的话,向bootloader,Linux kernel等。哪得写多少个if语句呀。

正因此Makefile诞生了,通过时间戳得概念,比较目标文件和依赖文件得最新修改时间,来决定是否需要再次编译该文件!

编写Makefile

CC := gcc
CLDFLAGS := -fPIC -shared -o

libfunction.so:function.c
        $(CC) $(CLDFLAGS) $@ $< -I ../include
        mv $@ ../
        mv main.c ../
CC :=gcc
CFLAGS := -Wall -O2 -o
CLDFLAGS := -Wl,-rpath

.PHONY:all
all:build



build:
        $(MAKE) -C src
        $(CC) $(CFLAGS) $@ main.c -I include -L . -lfunction $(CLDFLAGS) .

.PHONY:clean
clean:
        mv main.c src
        rm build

运行结果

make一下

查看一下

总结

相信你已经对Makefile已经有了新的理解和使用操作了。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务