zoukankan      html  css  js  c++  java
  • 【树莓派】Makefile的编写

    版权声明:本文为博主原创文章,转载请注明出处。 https://www.cnblogs.com/YaoYing/p/12167789.html

    Makefile的编写规范

    main.c 主程序入口

    #include <stdio.h>
    #include "a.h"
    
    int main()
    {
    	printf("This is main
    ");
    
    	test();
    
    	return 0;
    }
    

    a.c 被调用函数

    #include <stdio.h>
    
    void test()
    {
    	printf("This is a
    ");
    }
    

    a.h 被调用函数声明

    #include <stdio.h>
    
    void test();
    

    我们就利用上述三个文件,实现Makefile的编写

    第一个版本:编译-链接-生成可执行文件

    main:
            gcc -o main.o -c main.c
            gcc -o a.o -c a.c
            gcc -o main main.o a.o
    

    输出结果:

    pi@raspberrypi:~/test/make $ make
    gcc -o main.o -c main.c
    gcc -o a.o -c a.c
    gcc -o main main.o a.o
    pi@raspberrypi:~/test/make $ ./main 
    This is main
    This is a
    

    第二个版本:增加可删除中间件命令

    main:
    	gcc -o main.o -c main.c
    	gcc -o a.o -c a.c
    	gcc -o main main.o a.o
    clean:
    	rm -rf a.o main.o
    

    输出结果:

    pi@raspberrypi:~/test/make $ make clean
    rm -rf a.o main.o
    

    第三个版本:添加变量(类似于宏定义),当我们需要修改变量时只需修改一处即可

    CC=gcc
    
    main:
    	$(CC) -o main.o -c main.c
    	$(CC) -o a.o -c a.c
    	$(CC) -o main main.o a.o
    clean:
    	rm -rf a.o main.o
    

    输出结果:

    pi@raspberrypi:~/test/make $ make
    gcc -o main.o -c main.c
    gcc -o a.o -c a.c
    gcc -o main main.o a.o
    

    第四个版本:添加依赖关系,make选择编译。如果某文件没有修改,则直接进行链接,无需重复编译。当编译工作量较大时,可以节省编译时间

    CC=gcc
    
    main:main.o a.o
    	$(CC) -o main main.o a.o
    
    main.o:
    	$(CC) -o main.o -c main.c
    
    a.o:
    	$(CC) -o a.o -c a.c
    	
    clean:
    	rm -rf a.o main.o
    

    输出结果:

    pi@raspberrypi:~/test/make $ make
    gcc -o main main.o a.o
    

    第五个版本:$@--目标文件;$^--所有的依赖文件;$<--第一个依赖文件。.c.o:表示所有的.o文件都是依赖于相应的.c文件

    CC=gcc
    
    main:main.o a.o
    	$(CC) -o $@ $^
    
    .c.o:
    	$(CC) -c $<
    	
    clean:
    	rm -rf *.o main
    

    输出结果:

    pi@raspberrypi:~/test/make $ make
    gcc -c main.c
    gcc -c a.c
    gcc -c b.c
    gcc -o main main.o a.o b.o
    

    第六个版本:OBJS = $(SRCS:.c=.o)将所有.c文件前缀文件名复制到.o文件名

    CC=gcc
    
    TARGET=main
    
    SRCS=main.c a.c b.c
    
    OBJS = $(SRCS:.c=.o)
    
    $(TARGET):$(OBJS)
    	$(CC) -o $@ $^
    
    .c.o:
    	$(CC) -c $<
    	
    clean:
    	rm -rf *.o main
    

    输出结果:

    pi@raspberrypi:~/test/make $ make
    gcc -c main.c
    gcc -c a.c
    gcc -c b.c
    gcc -o main main.o a.o b.o
    

    更新日期20200616
    如有错误之处,请评论或者私信指出,非常感谢

  • 相关阅读:
    Eclipse
    svn 常用
    spidermonkey编译
    float format 显示
    点击6次修改服务器地址
    UITextField字数限制
    UINavigationController
    运行时runtime
    IOS 技术与面试
    Cocos2dx笔记
  • 原文地址:https://www.cnblogs.com/YaoYing/p/12167789.html
Copyright © 2011-2022 走看看