Makefile的常用技术总结

简介: 一、MAKE中的自动变量:    $@: 表示target的名字    $%: 仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是"foo.a(bar.o)",那么,"$%"就是"bar.o","$@"就是 "foo.a"。    $

一、MAKE中的自动变量:
    $@: 表示target的名字
    $%: 仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是"foo.a(bar.o)",那么,"$%"就是"bar.o","$@"就是 "foo.a"。
    $<: 表示第一个依赖条件的名字
    $?: 表示所有比target更新的依赖条件的名字列表
    $^: 表示所有依赖条件的名字,同时去除依赖列表中重复的条件
    $+: 同$^的功能基本相同,但是他并不去除依赖列表中的重复条件
    自动变量的另外一类扩展为,其中D为directory,F为File
    $(@D): 如果$@为/sbin/ifconfig 那么$(@D)为sbin
    $(@F): 如果$@为/sbin/ifconfig 那么$(@F)为ifconfig
    其他自动变量均依此类推.

二、虚拟路径:
    VPATH=variables (这里VPATH是内部变量)
    vpath pattern directory-list (这里vpath是内部指令)

    表示make搜寻target和prerequisite的目录,但是命令部分不会利用虚拟目录,他可以包含一组以空格分开的目录列表。
    VPATH=include src
    vpath %.c src1 src2    (目录可以有多个,模式只能有一个)
    vpath %.h include

三、后缀规则:
    .SUFFIXES: .out .a .ln .o .c .cc .C .cpp .p .f .F .r .y .l 以上是后缀规则中的缺省内置规则。
    .SUFFIXES: .pdf .fo .html .xml,表示自定义的后缀规则。
    .SUFFIXES: 如果没有定义任何必要条件,则表示打算删除所有的缺省后缀规则。
    
    .o.cpp:
        g++ -I ./include -c $< -o $@
    等效于
    %.o: %.cpp
        g++ -I ./include -c $< -o $@

 

四、常用命令行选项:

    make -n = --just-print         只是显示命令,但并不真正执行他们,方便用于调试
    make -f = --file                    可以灵性制定makefile的名字
    make -C = --directory          指出makefile的执行目录
    make -s = --silent               所有的命令都不显示
    make -i = --ignore-errors     忽略命令中失败的命令,仍然继续执行
    make -B = --always-make    认为所有的目标都需要更新(重编译)。
    make -e = --environment-overrides 指明环境变量的值覆盖makefile中定义的变量的值。
    make -h = --help
    make -I = --include-dir         指定一个被包含makefile的搜索目标。可以使用多个“-I”参数来指定多个目录
    make -r = --no-builtin-rule   禁止make使用任何隐含规则
    make -v = --version
    make -w = --print-directory  输出运行makefile之前和之后的信息。这个参数对于跟踪嵌套式调用make时很有用。
    make -o = --old-file             不重新生成的指定的<file>,即使这个目标的依赖文件新于它。

目录
相关文章
|
数据采集 算法 机器人
软件体系结构 - 调度算法(3) 单调速率调度算法
【4月更文挑战第19天】软件体系结构 - 调度算法(3) 单调速率调度算法
368 0
|
JavaScript 前端开发 API
JavaScript丨JavaScript和DOM
DOM是一个稍微复杂的东西,JavaScript当然也有操作DOM的对应API。我们这里就先简单讲讲什么DOM,如何通过JavaScript来操作DOM。
119 0
JavaScript丨JavaScript和DOM
|
前端开发 Java
java 手机号里 4位数字变成 * ,脱敏处理
java 手机号里 4位数字变成 * ,脱敏处理
935 0
java 手机号里 4位数字变成 * ,脱敏处理
|
人工智能 算法 测试技术
AI视频理解天花板,全新MiniGPT4-Video刷爆SOTA!
【4月更文挑战第10天】KAUST和哈佛大学联合研发的MiniGPT4-Video模型在视频理解任务中打破多项纪录,成为业界关注点。这款多模态AI系统基于大型语言模型,能同时处理视觉和文本信息,提升了视频内容理解的深度。通过创新的视觉-文本混合处理,模型在MSVD、MSRVTT等基准测试中取得显著性能提升。然而,由于依赖上下文窗口,目前对较长视频处理有限制。该模型的出现推动了视频理解领域的进步,具有广阔的应用前景。
329 1
AI视频理解天花板,全新MiniGPT4-Video刷爆SOTA!
|
SQL 自然语言处理 数据建模
阿里云百炼|析言GBI在中国一汽上线,大模型技术融入数智化转型
中国一汽自2022年起启动数智化转型,针对传统BI系统的局限性,如报表生成慢及数据处理不灵活等问题,与阿里云合作开发GPT-BI(阿里云百炼|析言GB)。该应用基于通义千问大模型,支持自然语言查询,自动产生分析图表,覆盖九大决策场景,准确率达92.5%。显著提高了决策效率与数据治理水平,引领汽车行业数智化转型新趋势。
1002 8
|
消息中间件 架构师 NoSQL
以架构师的视角,深入剖析如何设计订单超时自动取消的功能
我们在美团 APP 下单,假如没有立即支付,进入订单详情会显示倒计时,如果超过支付时间,订单就会被自动取消。 这篇文章,笔者想以架构师的视角,深入剖析如何设计订单超时自动取消的功能。
以架构师的视角,深入剖析如何设计订单超时自动取消的功能
|
缓存 安全 前端开发
Arm新一代架构发布:CPU能效提升40%,GPU性能提升15%
Arm新一代架构发布:CPU能效提升40%,GPU性能提升15%
548 0
|
运维 网络协议 应用服务中间件
使用go做一个返回公网IP的web服务
使用go做一个返回公网IP的web服务
498 0
|
开发工具 git Python
Python千万级字典快速去重脚本
Python千万级字典快速去重脚本
189 0
Python千万级字典快速去重脚本
页面404,后台 class not found,但是 jar 包可以定位到
页面404,后台 class not found,但是 jar 包可以定位到
125 0