通用的Makefile及解释

通用的Makefile及解释

  1. ######################################  
  2. # Copyright (c) 1997 George Foot (george.foot@merton.ox.ac.uk)  
  3. # All rights reserved.  
  4. ######################################  
  5. #目标(可执行文档)名称,库(譬如stdcx,iostr,mysql等),头文件路径  
  6. DESTINATION := test  
  7. LIBS :=   
  8. INCLUDES := .  
  9.   
  10.   
  11. RM := rm -f  
  12. #C,CC或CPP文件的后缀  
  13. PS=cpp  
  14. # GNU Make的隐含变量定义  
  15. CC=g++  
  16. CPPFLAGS = -g -Wall -O3 -march=i486  
  17. CPPFLAGS += $(addprefix -I,$(INCLUDES))  
  18. CPPFLAGS += -MMD  
  19.   
  20. #以下部分无需修改  
  21. SOURCE := $(wildcard *.$(PS))  
  22. OBJS := $(patsubst %.$(PS),%.o,$(SOURCE))  
  23. DEPS := $(patsubst %.o,%.d,$(OBJS))  
  24. MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS))  
  25. MISSING_DEPS_SOURCES := $(wildcard $(patsubst %.d,%.$(PS),$(MISSING_DEPS)))  
  26.   
  27. .PHONY : all deps objs clean rebuild  
  28.   
  29. all : $(DESTINATION)  
  30.   
  31. deps : $(DEPS)  
  32.          $(CC) -MM -MMD $(SOURCE)  
  33.   
  34.   
  35. objs : $(OBJS)  
  36.   
  37. clean :  
  38.          @$(RM) *.o  
  39.          @$(RM) *.d  
  40.          @$(RM) $(DESTINATION)  
  41.   
  42. rebuild: clean all   
  43.   
  44. ifneq ($(MISSING_DEPS),)  
  45. $(MISSING_DEPS) :  
  46.          @$(RM) $(patsubst %.d,%.o,$@)  
  47. endif  
  48.   
  49. -include $(DEPS)  
  50.   
  51. $(DESTINATION) : $(OBJS)  
  52.          $(CC) -o $(DESTINATION) $(OBJS) $(addprefix -l,$(LIBS))  
  53. #结束  

  • ":="赋值,和"="不同的是,":="在赋值的同时,会将赋值语句中所有的变量就地展开,也就是说,A:=$(B)后,B的值的改变不再影响A
  • 隐含规则。GUN Make在不特别指定的情况下会使用诸如以下编译命令:$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@,这也是为什么这个Makefile最后一个命令没有添加$(CPPFLAGS)的原因,因为缺省是包含这个变量的
  • 函数和变量很相似:"$ (函数名,空格,一列由逗号分隔的参数)"
  • SOURCES = $(wildcard *.cpp) 列出工作目录下文件名满足"*.cpp"条件的文件,以空格分隔,并将列表赋给SOURCE变量
  • patsubst函数:3个参数。功能是将第三个参数中的每一项(由空格分隔)符合第一个参数描述的部分替换成第二个参数制定的值
  • addprefix函数:2个参数。将源串(第2个参数,由空格分隔)中的每一项添加前缀(第1个参数)
  • filter-out函数:2个参数。从第二串中过滤掉包含在第一个串中的项
  • $(CC) -MM -MMD $(SOURCE) : 对每个源文件生成依赖(dependence,Make通过依赖规则来判断是否需要重新编译某个文件),"D"生成".d"文件,-MM表示去掉 depends里面的系统的头文件(使用<>包含的头文件)(若使用-M则全部包含,事实上,系统头文件被修改的可能性极小,不需要执行依赖检查)
  • .PHONY,不检查后面制定各项是否存在同名文件
  • ifneg...else...endif,Makefile中的条件语句
  • -include $(DEPS) : 将DEPS中的文件包含进来,"-"表示忽略文件不存在的错误
  • @$(RM) *.o : 开头的"@"表示在Make的时候,不显示这条命令(GNU Make缺省是显示的)
  • all : 作为第一个出现的目标项目,Make会将它作为主要和缺省项目("make"就表示"make all")
  • deps : 只生成依赖文件(.d文件)
  • objs : 为每一个源码程序生成或更新 '.d' 文件和'.o'文件
  • clean : 删除所有'.d','.o'和可执行文件
  • rebuild : clean然后重建
  • 内部变量$@, $< $^ : 分别表示目标名(:前面的部分,比如all),依靠列表(:后面的部分)中的第一个依靠文件,所有依靠文件
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值