zoukankan      html  css  js  c++  java
  • 【Linux开发技术之程序构建】Makefile学习(不断更新)

     作者:gnuhpc 
    出处:http://www.cnblogs.com/gnuhpc/ 
      

    1.入门篇

    1)Makefile的作用:帮助编译多文件。

    2)基本编写示例:以如下四个文件为例

    //main.c
    
    #include"mytool1.h"
    #include"mytool2.h"
    int main(int argc,char **argv)
    {
    mytool1_print("hello");
    mytool2_print("hello");
    }
    
    //mytool1.h
    #ifndef _MYTOOL_1_H
    #define _MYTOOL_1_H
    void mytool1_print(char *print_str);
    #endif
    
    //mytool1.c
    #include"mytool1.h"
    void mytool1_print(char *print_str)
    {
    printf("This is mytool1 print %s",print_str);
    }
    
    //mytool2.h
    #ifndef _MYTOOL_2_H
    #define _MYTOOL_2_H
    void mytool2_print(char *print_str);
    #endif
    
    //mytool2.c
    #include"mytool2.h"
    void mytool2_print(char *print_str)
    {
    printf("This is mytool2 print %s",print_str);
    } 
    

    对应进行编译构建的Makefile为

    main:main.o mytool1.o mytool2.o
    
    	gcc -o main main.o mytool1.o mytool2.o
    
    main.o:main.c mytool1.h mytool2.h
    
    	gcc -c main.c
    
    mytool1.o:mytool1.c mytool1.h
    
    	gcc -c mytool1.c
    
    mytool2.o:mytool2.c mytool2.h
    
    	gcc -c mytool2.c
    
    

    Makefile 的本质是参与构建的源代码之间依赖关系和编译方法进行说明。一般采用的格式如下:

    target: components
    TAB rule

    第一行表示的是依赖关系.  第二行是规则,使用TAB 键进行

    main:main.o mytool1.o mytool2.o 就是所谓的依赖关系,实际上是一种庖丁解牛的方式,建议在纸上画好关系依赖图,如本例:

    main
    ---main.o--(main.c,mytool1.h,mytool2.h)
    |
    mytool2.o--(mytool2.c,mytool2.h)
    |
    mytool1.o--(mytool1.c,mytool1.h)

    而gcc -o main main.o mytool1.o mytool2.o 就是所谓的规则。

    3)简化

    $@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件,使用替代规则可以简写上例如下:

    main:main.o mytool1.o mytool2.o
    	gcc -o $@ $^
    
    main.o:main.c mytool1.h mytool2.h
    	gcc -c $<
    
    mytool1.o:mytool1.cmytool1.h
    	gcc -c $<
    
    mytool2.o:mytool2.cmytool2.h
    	gcc -c $<
    

    如果有规律的命名规则,则可以简写上例如下:

    main:main.o mytool1.o mytool2.o
    	gcc -o $@ $^
    ..c.o:
    	gcc -c $<
    


                   作者:gnuhpc
                   出处:http://www.cnblogs.com/gnuhpc/
                   除非另有声明,本网站采用知识共享“署名 2.5 中国大陆”许可协议授权。


    分享到:

  • 相关阅读:
    亲测——pycharm下运行第一个scrapy项目 ©seven_clear
    [转]pycharm的一些快捷键
    一个豆瓣API的使用——拒绝思维定式
    小试牛刀--利用豆瓣API爬取豆瓣电影top250
    Python GUI编程--Tkinter
    多线程详解
    K8S+GitLab-自动化分布式部署ASP.NET Core(一) 部署环境
    初学者浅度剖析eShopOnContainers 里面用到的MediatR .
    通过Task异步加快对数组的运算
    为什么是容器?
  • 原文地址:https://www.cnblogs.com/gnuhpc/p/2316090.html
Copyright © 2011-2022 走看看