使用 .PHONY, 使用方法见下面描述或参考链接. 经过测试可行.
---------
phony 目标可以有依赖关系。当一个目录中有多个程序,将其放在一个makefile 中会更方便。因为缺省目标是makefile 中的第一个目标,通常将这个phony 目标叫做"all",其依赖文件为各个程序:all : prog1 prog2 prog3.PHONY : allprog1 : prog1.o utils.occ -o prog1 prog1.o utils.oprog2 : prog2.occ -o prog2 prog2.oprog3 : prog3.o sort.o utils.occ -o prog3 prog3.o sort.o utils.o这样,使用"make"将可以将三个程序都生成了。d当一个phony 目标是另一个的依赖,其作用相当于子程序,例如:.PHONY: cleanall cleanobj cleandiffcleanall : cleanobj cleandiffrm programcleanobj :rm *.ocleandiff :rm *.diff

PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。

如果编写一个规则,并不产生目标文件,则其命令在每次make 该目标时都执行。例如:
  clean:
  rm *.o temp
因为"rm"命令并不产生"clean"文件,则每次执行"make clean"的时候,该命令都会执行。如果目录中出现了"clean"文件,则规则失效了:没有依赖文件,文件"clean"始终是最新的,命令永远不会 执行;为避免这个问题,可使用".PHONY"指明该目标。如:
  .PHONY : clean
  这样执行"make clean"会无视"clean"文件存在与否。

已知phony 目标并非是由其它文件生成的实际文件,make 会跳过隐含规则搜索。这就是声明phony 目标会改善性能的原因,即使你并不担心实际文件存在与否。
  完整的例子如下:
  .PHONY : clean
  clean :
  rm *.o temp

phony 目标可以有依赖关系。当一个目录中有多个程序,将其放在一个makefile 中会更方便。因为缺省目标是makefile 中的第一个目标,通常将这个phony 目标叫做"all",其依赖文件为各个程序:
  all : prog1 prog2 prog3
  .PHONY : all
  prog1 : prog1.o utils.o
           cc -o prog1 prog1.o utils.o
  prog2 : prog2.o
           cc -o prog2 prog2.o
  prog3 : prog3.o sort.o utils.o
           cc -o prog3 prog3.o sort.o utils.o

假设

你的一个项目最后需要产生两个可执行文件。你的主要目标 是产生两个可执行文件,但这两个文件是相互独立的——如果一 个文件需要重建,并不影响另一个。你可以使用“假象目的”来 达到这种效果。一个假象目的跟一个正常的目的几乎是一样的, 只是这个目的文件是不存在的。因此, make 总是会假设它需要 被生成,当把它的依赖文件更新后,就会执行它的规则里的命令行。

如果在我们的 makefile 开始处输入:

all : exec1 exec2

其中 exec1 和 exec2 是我们做为目的的两个可执行文件。 make 把这个 'all' 做为它的主要目的,每次执行时都会尝试把 'all' 更新。但既然这行规则里没有哪个命令来作用在一个叫 'all' 的 实际文件(事实上 all 并不会在磁碟上实际产生),所以这个规 则并不真的改变 'all' 的状态。可既然这个文件并不存在,所以 make 会尝试更新 all 规则,因此就检查它的依靠 exec1, exec2 是否需要更新,如果需要,就把它们更新,从而达到我们的目的。

如何用一个makefile编译多个目标相关推荐

  1. Mac 从Makefile 编译 Rocksdb 源码的一些注意事项

    文章目录 前言 Makefile 编译流程 1. 平台变量/环境变量的初始化. 2. 编译需要的源码文件变量初始化. 3. include 目录的设置. 4. 编译的执行逻辑. 问题记录1:可能的打包 ...

  2. makefile编译_C++ Lesson 5:编译Makefile

    主要内容: 编译程序的过程:preprocessor.compiler.assembler.linker.loader Makefile 类的Makefile 其他方式:.h & .cpp 一 ...

  3. 训练softmax分类器实例_知识蒸馏:如何用一个神经网络训练另一个神经网络

    作者:Tivadar Danka 编译:ronghuaiyang 原文链接 知识蒸馏:如何用一个神经网络训练另一个神经网络​mp.weixin.qq.com 导读 知识蒸馏的简单介绍,让大家了解知识蒸 ...

  4. 机器视觉:makefile编译调用Caffe框架的C++程序

    Caffe作为在众多公司搞深度学习时较多使用的框架,其在使用的友好程度上显然要比后起的一些深度学习框架要差一些,虽然如此,其作为深度学习的第一个开源框架,自有它的很多优势,比如设计结构.关于Caffe ...

  5. Makefile、多Makefile编译静态库、动态库、SRC实例总结

    静态库生成及使用 calc.h #ifndef __MY_LIB_H__ #define __MY_LIB_H__ int add(int a, int b); #endif calc.c #incl ...

  6. 交互系统的构建之(一)重写Makefile编译TLD系统

    交互系统的构建之(一)重写Makefile编译TLD系统 zouxy09@qq.com http://blog.csdn.net/zouxy09 为了对TLD系统做一些功能的填充,例如添加语音合成来提 ...

  7. 加快linux编译速度,Linux Makefile 编译速度的优化【转】

    前言 如何提高 Makefile 的编译速度呢?既然是提高,那肯定是对于大项目而言,因为小项目本身源文件不多,Makefile 优化与否,对于编译速度而言,影响并不大.当然对于那些追求速度达到极致的人 ...

  8. 工程级Makefile编译模板

    文章目录 1. 一点说明 2. 顶层目录的Makefile模板 3. 顶层目录的共通设定 4. 子目录中的Makefile模板 5. 应用实例 6. 后记 1. 一点说明 如果要使用Makefile编 ...

  9. 使用make命令编译C语言程序,c, c++用makefile编译工程 - 1

    基本思路: 最外层有三个文件: Makefile, Make.share, Make.include. 每个工程目录中都有一个Makefile文件. 其中最外层的Makefile是外壳部分.需要调用者 ...

最新文章

  1. 从实验现象详细分析BGP的路由策略与选路原则
  2. 论嵌入式与单片机,相爱相杀。
  3. leetcode142. 环形链表 II
  4. 01章.计算机网络概述(1.1~1.6)
  5. 中国摊铺设备市场趋势报告、技术动态创新及市场预测
  6. Windows下实现gettimeofday()函数
  7. 常见排序算法之插入排序
  8. 图像处理(四) Sobel边缘检测与canny边缘检测对比
  9. GCD中的dispatch_barrier_async函数的使用(栅栏函数)
  10. [初学Python]利用某网站的功能写一个磁力链转种子工具
  11. python直方图教程_Matplotlib绘制直方图
  12. 如何下载浏览器中的flash 视频
  13. IE8跳转谷歌浏览器亲测有效
  14. MODBUS-RS485布线的8条准则
  15. npm 废弃/删除(五)
  16. 软件测试工程师Linux笔试题及答案(三)
  17. [附源码]Nodejs计算机毕业设计交通违章举报平台Express(程序+LW)
  18. phpcms mysql 事务_PHPCMS中mysql数据库优化教程
  19. 选矿采矿机械的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. [软件人生]外包兼职与绝路

热门文章

  1. LinkedIn高级分析师王益:大数据时代的理想主义和现实主义
  2. MQTT——java简单测试(二)
  3. IOM计算机组成原理,计算机组成原理设计教案.doc
  4. Tensorflow移动端之如何将自己训练的MNIST模型加载到Android手机上
  5. 哪款蓝牙耳机玩吃鸡延迟低?四款低延迟游戏蓝牙耳机推荐
  6. 从全球顶级数据库大会 SIGMOD 看数据库发展趋势
  7. word无法验证服务器,Office提示“无法验证此应用程序的许可证”时怎么处理?...
  8. linkedin 分享_如何将您的LinkedIn个人资料添加到WordPress
  9. javascript实现繁体简体转换
  10. SpringBoot(二):详细讲解SpringBoot整合MyBatis