大量 vcproj 构建顺序管理工具的实现(二)
来源:互联网 发布:方舟生存进化帧数优化 编辑:程序博客网 时间:2024/06/04 00:43
.bat / .sln / .vcproj 文件的解析后续再说,这里先讨论下模块依赖关系的排序。
假设我们通过上一步获取了模块之间的依赖关系了,存储为这种结构:
struct ProjectInfo;typedef std::map<std::string, ProjectInfo *> DependProjects;//一个 VC 项目的信息struct ProjectInfo{ProjectInfo(): uiDependencyCount_(0), uiDependencyLevel_(0){}std::stringsProjectNameLowerCase_;//小写项目名字(唯一),专用于查找DependProjectsprjDepends_;//本项目隐式依赖的项目列表UINT32uiDependencyLevel_;//依赖层次,层次越小的项目越早 BuildUINT32uiDependencyCount_;//本项目被多少个项目依赖,计数越大的越早 Build};
先描述一下具体的排序算法:
1)遍历初始项目列表,取出完全无任何依赖关系的项目(prjDepends_ 字段无任何元素的项目)放入已处理项目列表内,设置其 uiDependencyLevel_ 为 1
2)在无限循环里遍历初始项目列表,取出所依赖项目都在已处理项目列表内的那些项目,以遍历次数设置其 uiDependencyLevel_ 为 2,3 ...,直到初始项目列表为空
3)双重循环累加项目内的 uiDependencyCount_ 字段
4)最后是STL排序算法需要的 functor 定义
//给项目排序,2字段排序struct Pred_ByBuildOrder{bool operator()(ProjectInfo const *lhs, ProjectInfo const *rhs) const{//按依赖层次排序,层次小的优先 Buildif( lhs->uiDependencyLevel_ < rhs->uiDependencyLevel_ )return true;if( lhs->uiDependencyLevel_ > rhs->uiDependencyLevel_ )return false;//按依赖此项目的项目个数排序,依赖计数大的优先 Buildreturn lhs->uiDependencyCount_ > rhs->uiDependencyCount_;}};
0 0
- 大量 vcproj 构建顺序管理工具的实现(二)
- 大量 vcproj 构建顺序管理工具的实现(一)
- vcproj
- Memcached的管理工具实现
- 实验二~顺序表的实现
- 实验二:顺序表的实现
- 关于VCPROJ文件的说明
- 关于VCPROJ文件的说明
- 关于VCPROJ文件的说明
- 大量Hash算法的实现
- 大量Hash算法的实现
- 大量Hash算法的实现
- 大量Hash算法的实现
- 大量Hash算法的实现
- 顺序链表的构建
- QObject 的构建/销毁顺序
- 大量创建的对象需要谨慎构建其数据成员
- google v8 实战 -- 神秘的v8.vcproj
- 郑州方正医用电子有限公司简介
- Python学习笔记——可变对象和不可变对象
- 自己写atoi
- struts2动态方法调用
- Linux内核源码分析方法
- 大量 vcproj 构建顺序管理工具的实现(二)
- 字符串总结
- 消除当前定义的宏,来重新定义宏的值 从而让cocos2d-x变为非调试模式
- 关于USRP和gnuradio的数据类型
- 打印文件的最后K行(C++和Java实现)
- 浙江大华2012笔试题+答案解析
- 关于C++中的友元函数的总结
- Shiro标签
- 重温:Spring 的编程式事务管理及声明式事务管理