zoukankan      html  css  js  c++  java
  • makefile编写---单个子目录编译模板

      经过这次地库项目之后,虽然时间不久,跟团队在一起,虽然队员不一定在技术上有过人之处,但是来自大公司的员工,在工具使用和代码规范方面还是有点可鉴之处,在搭建主控模块是,就得面临makefile编写,因为所有的功能模块都得自己实现,所以使得我不得不熟练下makefile,至少在以后的项目中,能用上自己写的模板!

      在默认的方式下,也就是我们只输入make命令。那么,

        1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
        2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。
        3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。
        4、如果edit所依赖的.o文件也不存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这有点像一个堆栈的过程)
        5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。

    http://blog.csdn.net/haoel/article/details/2887

      依然有简单到复杂。

    (一)首先是两三个的简答c文件.

    没哟自动化变量的makefile:

    my_app : main.o, app1.o, app2.o, app3.o, app4.o
                    gcc –o my_app main.o app1.o, app2.o, app3.o, app4.o
            main.o : main.c app1.h app2.h app3.h
                    gcc –c main.c
            app1.o : app1.c app1.h
                    gcc –c app1.c
            app2.o : app2.c app2.h
                    gcc –c app2.c
            app3.o : app3.c app3.h
                    gcc –c app3.c
            clean :
                    rm main.o app1.o, app2.o, app3.o, app4.o

    Makefile 有三个非常有用的变量:$@,$^,$<。其意义为:

    $@:目标文件

    $^:所有的依赖文件

    $<:第一个依赖文件

    带自动化变量的:

    1. #这是简化后的Makefile   
    2. main: main.o app1.o app2.o app3.o  
    3. gcc -o $@ $^  
    4. main.o: main.c app1.h app2.h  
    5. gcc -c $<  
    6. app1.o: app1.c app1.h  
    7. gcc -c $<  
    8. app2.o: app2.c app2.h  
    9. gcc -c $<  
    10. app3.o:app3.c app3.h
    11. gcc -c $<

    makefile 缺省规则

    ..c.o:

    gcc -c $<

    这个规则表示所有的.o文件都是依赖于相应的.c文件的,例如app1.o 依赖于app1.c。

    带缺省规则的:

    1. #这是再一次简化后的Makefile   
    2. main: main.o app1.o appl2.o app3.o  
    3. gcc -o $@ $^  
    4. ..c.o:  
    5. gcc -c $<  

    http://blog.csdn.net/livelylittlefish/article/details/3854220

    (二)标准模板多个c文件的makefile

    1、wildcard : 扩展通配符
    2、notdir : 去除路径
    3、patsubst :替换通配符

    http://wenku.baidu.com/link?url=6HuOUSmDQNJlSqBAiuFpZF4FvmjfCL4mriPKsaVZJZwPWqrb7wXjTKSBhLpaHZnHYOAJz5ZE0lA8HZUZKgrjNhdYSj3WHvFszwlLwEiwgzC

  • 相关阅读:
    1.Hello World
    1.Hello World
    1.Hello World
    32.IDEA新建MAVEN项目时速度缓慢
    31.最特殊的快捷键 Alt + Enter 介绍(新用户必看)
    HelloWorld
    mybatis要指定参数再数据库中的类型,类型要全大写
    递归函数,修改全局变量,高阶函数
    不定长参数
    函数返回值return,列表字典的拆包
  • 原文地址:https://www.cnblogs.com/pengkunfan/p/3857562.html
Copyright © 2011-2022 走看看