第二十三课 模块独立编译的支持

 1 .PHONY : all compile link clean rebuild $(MODULES)
 2
 3 DIR_PROJECT := $(realpath .)
 4 DIR_BUILD_SUB := $(addprefix $(DIR_BUILD)/, $(MODULES))
 5 MODULE_LIB := $(addsuffix .a, $(MODULES))
 6 MODULE_LIB := $(addprefix $(DIR_BUILD)/, $(MODULE_LIB))
 7
 8
 9 APP := $(addprefix $(DIR_BUILD)/, $(APP))
10
11 define makemodule
12     cd $(1) && 13     $(MAKE) all 14             DEBUG:=$(DEBUG) 15             DIR_BUILD:=$(addprefix $(DIR_PROJECT)/, $(DIR_BUILD)) 16             DIR_COMMON_INC:=$(addprefix $(DIR_PROJECT)/, $(DIR_COMMON_INC)) 17             CMD_CFG:=$(addprefix $(DIR_PROJECT)/, $(CMD_CFG)) 18             MOD_CFG:=$(addprefix $(DIR_PROJECT)/, $(MOD_CFG)) 19             MOD_RULE:=$(addprefix $(DIR_PROJECT)/, $(MOD_RULE)) && 20     cd .. ;
21 endef
22
23 all : compile $(APP)
24     @echo "Success! Target ==> $(APP)"
25
26 compile : $(DIR_BUILD) $(DIR_BUILD_SUB)
27     @echo "Begin to compile ..."
28     @set -e; 29     for dir in $(MODULES); 30     do 31         $(call makemodule, $$dir) 32     done
33     @echo "Compile Success!"
34
35 link $(APP) : $(MODULE_LIB)
36     @echo "Begin to link ..."
37     $(CC) -o $(APP) -Xlinker "-(" $^ -Xlinker "-)" $(LFLAGS)
38     @echo "Link Success!"
39
40 $(DIR_BUILD) $(DIR_BUILD_SUB) :
41     $(MKDIR) [email protected]
42
43 clean :
44     @echo "Begin to clean ..."
45     $(RM) $(DIR_BUILD)
46     @echo "Clean Success!"
47
48 rebuild : clean all
49
50 $(MODULES) : $(DIR_BUILD) $(DIR_BUILD)/$(MAKECMDGOALS)
51     @echo "Begin to compile [email protected]"
52     @set -e; 53     $(call makemodule, [email protected])
54     

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9735278.html

时间: 2024-10-21 12:47:34

第二十三课 模块独立编译的支持的相关文章

第二十三课

第二十三课第一单元语法部分 Vておく<提前>:预先…… 口语形式:-とく 说明:   A.表示为后面要做的事情事先做好某种准备. B.表示采取某种行为,并使其结果的状态持续下去.   C.有时表示一种临时的措施. 例句:     1 日本へ行く前に日本語を習っておくつもりだ.    2 電気は消さないで 練習: 1.事先打个电话问一.朝までつけておこう.    3 その場で一応の手当てをしておいて.病院へ連れていった.下比较好 2.预先磨好刀. Vてある<客体存续的状态>: 说明:

NeHe OpenGL教程 第二十三课:球面映射

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第二十三课:球面映射 球面映射: 这一个将教会你如何把环境纹理包裹在你的3D模型上,让它看起来象反射了周围的场景一样. 球体环境映射是一个创建快速金属反射效果的方法,但它并不像真实世界里那么精确!我们从18课的代码开始来创建这个教程

第二十三课:事件系统2

本课主要来讲解一下jQuery是如何实现它的事件系统的. 我们先来看一个问题: 如果有一个表格有100个tr元素,每个都要绑定mouseover/mouseout事件,改成事件代理的方式,可以节省99次绑定,更何况它还能监听将来添加的tr元素.这就是jQuery中的live方法. 这种机制使用的是事件冒泡机制实现的,我们把事件处理函数绑定在tr的父元素上,然后再tr上面触发的事件会冒泡到tr的父元素,因此父元素就可以触发这个事件处理函数,在事件处理函数中就可以通过这个event获取到事件源,然后

ParisGabriel:Python全栈工程师(0基础到精通)教程 第二十三课(每周总结:2)

ParisGabriel 每天坚持 一天一篇 点个订阅吧  灰常感谢    当个死粉也阔以 week summer: Python人工智能从入门到精通 函数式编程: 是指用一系列函数解决问题 每一个函数完成细小的功能,一系列函数的任意组合可以完成 大问题 函数仅接受输入并产生输入,不包含任何影响输出的内部 状态函数的可重用性: 如果一个函数的输入参数一定,则返回结果必须一定的函数 称为可重用函数 可重入和不可重入就是访问除局部变量以外的变量函数式编程要求: def 创建函数最好不要访问局部作用域

JAVA学习第二十三课(多线程(二))- (多线程的创建方式二 :实现Runnable接口(常用))

当一个类有父亲,但是其中的功能还希望实现线程,那么就不能采用继承Thread的方式创建线程 那么就可以通过接口的方式完成 准备扩展Demo类的功能,让其中的内容可以作为线程的任务执行 实现Runnable接口,Runnable接口中只有一个方法run 一.创建线程的第二种方法 Runnable的出现仅仅是将线程的任务进行了对象的封装 /* * 创建线程的第二种方法 * 1.定义类实现Runnable接口 * 2.覆盖接口中的fun方法,将线程的任务代码封装到run方法中 * 3.通过Thread

【批处理学习笔记】第二十三课:用户变量和变量引用

用户变量    编写批处理程序时,用户根据需要自己定义的变量称之为用户变量.用户变量类似于C语言里面的变量,仅仅在定义该变量的程序中有效.    用户变量由set命令定义,这是批处理中非常非常重要的一个操作,从而使set命令成为批处理里面使用频率最高的几个命令之一.关于set命令的使用,参考set /?,本教程也会在后面对其进行讲解. 变量引用    前面的几节课里面,我们已经看到了如何引用变量,即直接用变量名操作变量,通过"%"或"!"来获取变量的值.其中,只有在

第二十三篇 Java如何编译 计算器 的源代码共享

大家好,今天放了一天的假,无聊的我简单的敲了一下计算器的源代码,发现以前的东西都忘的差不多了,所以趁现在还有点记忆,先试着敲回以前的感觉.... 好了,废话不多说,先看原码: 先创建一个主类: public class Test{ public static void main(String[ ] args){ Calculator calc=new Calculator(); calc.PaintingFrameUi(); } } 在新建几个监听器: 第一个: import javax.swi

Spring入门第二十三课

我们看基于XML配置的方式配置AOP 看代码: package logan.study.aop.impl; public interface ArithmeticCalculator { int add(int i, int j); int sub(int i, int j); int mul(int i, int j); int div(int i, int j); } package logan.study.aop.impl; public class ArithmeticCalculato

22.2015.08.18第二十三课mvc1,2(mvc环境搭建)

(1)修改Web.config的连接符,将数据库信息正确填写. <connectionStrings> <add name="con" connectionString="Database=Tjfx;Server=192.168.200.16;Integrated Security=false;Uid=sa;Password=123;" providerName="System.Data.SqlClient"/> <