zoukankan      html  css  js  c++  java
  • makefile的书写

    工作中会遇到makefile的书写,有必要做一些笔记。尽管网上有”万能模板“可以使用,但我觉得还是有必要从最基础的写起。

    平常在windows下开发,不知道自己用过makefile,其实大部分IDE里面都集成了makefile,只不过大家平常没有注意,比如visual studio中集成了nmake,QT里面集成了qmake等。

    (其余内容下次有时间补上)

    【1】程序版本

    开发调试过程可能产生多个程序版本,可以在目标文件后(前)增加版本号标识。

    VERSION = 1.00
    $(CC) $(OBJ) $(LIB_PATH) $(LIB_NAMES) -o output/$(TARGET)$(VERSION)

    【2】编译器选择

    Linux下为gcc/g++;arm下为arm-linux-gcc;不同CPU厂商提供的定制交叉编译器名称可能不同,如Hisilicon“arm-hisiv300-linux-gcc”。

    CC = gcc

    【3】宏定义
    开发过程,特殊代码一般增加宏条件来选择是否编译,如调试打印输出代码。
    -D是标识,后面接着的是“宏”。

    DEBUG =-DUSE_DEBUG

    【4】编译选项
    可以指定编译条件,如显示警告(-Wall),优化等级(-O)。

    CFLAGS =-Wall -O

    【5】源文件
    指定源文件目的路径,利用“wildcard”获取路径下所有依赖源文件。

    SOURCES =$(wildcard ./source/*.c)

    【6】头文件
    包含依赖的头文件,包括源码文件和库文件的头文件。

    INCLUDES =-I./include

    【7】库文件名称
    指定库文件名称,库文件有固定格式,静态库为libxxx.a;动态库为libxxx.so,指定库文件名称只需写“xxx”部分,

    LIB_NAMES =-lfun_a -lfun_so

    【8】库文件路径
    指定依赖库文件的存放路径。注意如果引用的是动态库,动态库也许拷贝到“/lib”或者“/usr/lib”目录下,执行应用程序时,系统默认在该文件下索引动态库。

    LIB_PATH =-L./lib

    【9】目标文件
    调用“patsubst”将源文件(.c)编译为目标文件(.o)。

    OBJ    =$(patsubst %.c, %.o, $(SOURCES))

    【10】执行文件
    执行文件名称

    TARGET =app

    【11】编译

    %.o: %.c
        $(CC) $(INCLUDES) $(DEBUG) $(CFLAGS) $< -o $@

    【12】链接
    可创建一个“output”文件夹存放目标执行文件。链接完输出目标执行文件,可以删除编译产生的临时文件(.o)。

    $(TARGET):$(OBJ)
        @mkdir -p output
        $(CC) $(OBJ) $(LIB_PATH) $(LIB_NAMES) -o output/$(TARGET).$(VERSION)
        @rm -rf $(OBJ)

    【13】清除编译信息
    执行“make clean”清除编译产生的临时文件。

    .PHONY:clean
    clean:
        @echo "Remove linked and compiled files......"
        rm -rf $(OBJ) $(TARGET) output 

    参考博客:https://blog.csdn.net/real_myth/article/details/72633320

    参考博客:https://blog.csdn.net/qq_20553613/article/details/90649734?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4

  • 相关阅读:
    AngularJS-webapp($q)
    mybatis
    maven联通网络下中央仓库不能访问的解决办法
    IDEA闪退问题
    scala学习笔记(8)文件和正则表达式
    scala学习笔记(8)
    scala学习笔记(7)
    kafka复习(2)
    第一天
    while循环
  • 原文地址:https://www.cnblogs.com/juluwangshier/p/11581574.html
Copyright © 2011-2022 走看看