zoukankan      html  css  js  c++  java
  • makefile

    makefile 语法:

    目标文件:生成目标文件的依赖文件

    生成目标文件所需要执行的动作(必须以tab键开头)

    常用变量代表的意思: $@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件

                                         ~--当前用户目录,*所有符号的通配符

     常用的查找包含符号:-I 将目标作为第一个寻找头文件的目标

                                        -L将目标作为第一个寻找库文件的目标

                                        -l在目标中寻找.so文件,如-lword在指定目录寻找libworld.so这个动态库文件

    make可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去在每一个[.o]文件后都写上类似的命令,因为,我们的make会自动识别,并自己推导命令。只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一个whatever.o,那么whatever.c,就会是whatever.o的依赖文件。并且 cc -c whatever.c 也会被推导出来。所以这样也是可行的  whatever.o : defs.h,当然这样会降低makefile的可读性。

    伪目标:

    为了避免和文件重名的这种情况,我们可以使用一个特殊的标记“.PHONY”来显示地指明一个目标是“伪目标”,向make说明,不管是否有这个文件,这个目标就是“伪目标”。

    只要有这个声明,不管是否有“clean”文件,要运行“clean”这个目标,只有“make clean”这样。于是整个过程可以这样写:

        .PHONY: clean

        clean:

               rm *.o temp

    命令:

    显示命令:echo  。。。

    如果你要让上一条命令的结果应用在下一条命令时,你应该使用分号分隔这两条命令。

    常用的在目标文件夹中包含所有的c文件命令:shell find 路径 -maxdepth   -name  "*.c"

    判断目录是否存在命令:shell if [! -d '/data/']  如果data目录不存在,则执行。。。

    编译宏以“define”开始,以“endef”结束

     

     gcc常用参数:

    -o指定输出文件名

    -O优化编译、链接

    -c只编译不链接

    -g增加gdb调试

    -w关闭编译告警

    -W打开编译告警

    -fPIC产生与位置无关的代码(生成动态库.SO时候用)

    -WI,-Bsymbolic 强制动态库使用自己的符号

     

    参考链接:https://blog.csdn.net/weixin_38391755/article/details/80380786

    小型可参考的makefile模板:https://www.cnblogs.com/prettyshuang/p/5552328.html

  • 相关阅读:
    Mongo Windows 基本使用入门
    ASP.NET Web API 使用Swagger使用笔记
    Smtp协议与Pop3协议的简单实现
    详解boost库中的Message Queue .
    Bencode编码解析的C++实现
    pugixml使用教程
    在QT中使用Irrlicht引擎的方法与步骤
    七大查找算法
    java保留小数点两位的4种方法
    [Node] nvm 安装 node 和 npm
  • 原文地址:https://www.cnblogs.com/bewolf/p/9936909.html
Copyright © 2011-2022 走看看