zoukankan      html  css  js  c++  java
  • 一点一点学写Makefile-1

    相信很多Linux开发者 都得自己来写Makefile,刚开始学习学写这个的时候都会碰到很多困难,我之前没有自己独立完成过Makefile,都是在公司已有的模板上添加。现在突然有一个很大的想法就是从零开始写Makefile,这个博客就是我的学习笔记。

    开始准备我写的代码,总共七个文件,内容都很简单,工程的下载地址是:               下载地址

    代码如下:

    1. //add.h  
    2.   
    3. #ifndef ADD_H  
    4. #define ADD_H  
    5.   
    6. int add(int a, int b);  
    7.   
    8. #endif // ADD_H  
    9.   
    10. //add.cpp  
    11. #include "add.h"  
    12.   
    13. int add(int a, int b)  
    14. {  
    15.     return a + b;  
    16. }  
    1. //mul.h  
    2. #ifndef MUL_A  
    3. #define MUL_A  
    4.   
    5. int mul(int a, int b);  
    6.   
    7. #endif // MUL_A  
    8.   
    9. //mul.cpp  
    10. #include "mul.h"  
    11.   
    12. int mul(int a, int b)  
    13. {  
    14.     return a * b;  
    15. }  
    1. //sub.h  
    2. #ifndef SUB_H  
    3. #define SUB_H  
    4.   
    5. int sub(int a, int b);  
    6.   
    7. #endif // SUB_H  
    8.   
    9. //sub.cpp  
    10. #include "sub.h"  
    11.   
    12. int sub(int a, int b)  
    13. {  
    14.     return a - b;  
    15. }  


    接下来就是最重要的Makefile文件了

    1. //Makefile  
    2. //make.force  
    3.   
    4. CROSS =   
    5. CC = $(CROSS)gcc  
    6. CXX = $(CROSS)g++  
    7. DEBUG = -g -O2  
    8. CFLAGS = $(DEBUG) -Wall -c  
    9. RM = rm -rf  
    10.   
    11. SRCS = add.cpp sub.cpp mul.cpp main.cpp  
    12. OBJS = $(patsubst %.cpp, %.o, $(SRCS))  
    13.   
    14. VERSION = 1.0.0.0  
    15. TARGET = test.$(VERSION)  
    16.   
    17. $(TARGET) : $(OBJS)  
    18.     $(CXX) $^ -o $@  
    19.   
    20. $(OBJS):%.o : %.cpp  
    21.     $(CXX) $(CFLAGS) $< -o $@  
    22.   
    23. clean:  
    24.     $(RM) $(TARGET) *.o   


    好了,这就是我的工程里面所有的代码和文件,这里面有Makefile文件和make.force两个文件,这两个文件的内容完全相同。在执行make命令的时候,系统会自动找到makefile或Makefile文件(注:尽可能使用Makefile名称,因为linux开发项目中,所有的文件名字都是小写,因此为了区分出make文件,将M大写),除此之外也可以手动指定make文件,使用"make -f make.force"来指定将make.force文件作为执行make命令的文件,清理内容是("make clean -f make.force")。

    下来,开始一句一句的讲解Makefile文件的命令:

    CROSS =     //在开发时候,有时候会有嵌入式的选项
    CC = $(CROSS)gcc
    CXX = $(CROSS)g++
    DEBUG = -g -O2   //这里一般设置为空,在编译时候手动指定,例如:make DEBUG="-g -O2"
    CFLAGS = $(DEBUG) -Wall -c
    RM = rm -rf

    SRCS = add.cpp sub.cpp mul.cpp main.cpp   //最笨的方法,将所有的.cpp文件添加到SRCS中
    OBJS = $(patsubst %.cpp, %.o, $(SRCS))       //通过*.cpp文件获得同名的*.o文件

    VERSION = 1.0.0.0   //版本信息
    TARGET = test.$(VERSION) //组装文件名和版本信息

    $(TARGET) : $(OBJS) //连接
        $(CXX) $^ -o $@

    $(OBJS):%.o : %.cpp   //生成*.o文件
        $(CXX) $(CFLAGS) $< -o $@

    clean:
        $(RM) $(TARGET) *.o

  • 相关阅读:
    day 66 ORM django 简介
    day 65 HTTP协议 Web框架的原理 服务器程序和应用程序
    jQuery的事件绑定和解绑 事件委托 轮播实现 jQuery的ajax jQuery补充
    background 超链接导航栏案例 定位
    继承性和层叠性 权重 盒模型 padding(内边距) border(边框) margin 标准文档流 块级元素和行内元素
    属性选择器 伪类选择器 伪元素选择器 浮动
    css的导入方式 基础选择器 高级选择器
    03-body标签中相关标签
    Java使用内存映射实现大文件的上传
    正则表达式
  • 原文地址:https://www.cnblogs.com/catgatp/p/6527220.html
Copyright © 2011-2022 走看看