zoukankan      html  css  js  c++  java
  • Makefile详解

    原文链接:https://blog.csdn.net/qq_38646470/article/details/79917494
    专栏链接:https://blog.csdn.net/column/details/20028.html

        或许很多Winodws 的程序员都不知道这个东西,因为那些Windows 的IDE都为你做了这个工作,但我觉得要作一个好的和 professional 的程序员,makefile 还是要懂。在Linux 下的软件编译,你就不能不自己写makefile 了,会不会写makefile,从一个侧面说明了一个人是否具备完 成大型工程的能力。
        makefile 关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile 定义了一系 列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile 就像一个Shell 脚本一样,其中也可以执行操作系统的命令。
        makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。
    下面就来看如何写Makefile文件:
    Makefile文件编写规范:

    目标:依赖文件                               
     $^  代表所有依赖文件
     $@  代表所有目标文件
     $<  代表第一个依赖文件
     %   代表通配符
     @指令:屏蔽指令
    定义变量(变量大写)
    变量名=值1 值2 ...
    使用变量 $(变量名)
    

    下来看事例:
    假设我们有很多个文件(fun1.c fun2.c fun3.c main.h)
    假设最后我们就想得到main一个文件
    初级版:

    .PHONY : clean
    
    main : fun1.o fun2.o fun3.o main.o
    	gcc -g fun1.o fun2.o fun3.o main.o -o main
    fun1.o : fun1.c main.h
    	gcc -Wall -c -g -o fun1.o
    fun2.o : fun2.c main.h
    	gcc -Wall -c -g -o fun2.o
    fun3.o : fun3.c main.h
    	gcc -Wall -c -g -o fun3.o
    
    clean :
    	rm -rf *.o
    

    精简版

    .PHONY : clean
    
    FM=fun1.o fun2.o fun3.o main.o
    
    main : $(FM)
    	(前面一个tab键)gcc -g $^ -o $@
    %.c : %.o
    	(前面一个tab键)gcc -c -g - Wall $< -o $@
    clean :
    	(前面一个tab键)rm -rf *.o
    
    

    看看测试效果:
    这里写图片描述
    当然Makefile 还有很多其他的用处,如需更深层次了解请看makefile深度解析

  • 相关阅读:
    tcp_tw_recycle 的问题, 使用某一个wifi,APP老是连接不上网络
    stackoverflow 的架构
    服务器的返回码总结
    iOS10 app连接不上网络的问题
    nsurl 测试ATS
    处理数据队列
    换手率的公司使用MQTT的框架
    导入charts开源库到工程里面
    极光推送的推送方式
    自己生成一个NDK的浅析
  • 原文地址:https://www.cnblogs.com/zhonglongbo/p/8881767.html
Copyright © 2011-2022 走看看