public void ParseObj(Boolean debug) { var map = ".map"; // 调试版 if (debug) { map = "D" + map; } // 找到映射文件 var mp = "List".AsDirectory().GetAllFiles("*" + map).FirstOrDefault(); if (mp == null || !mp.Exists) { return; } Console.WriteLine(mp.FullName); var name = mp.Name.TrimEnd(".map"); // 读取所有需要用到的对象文件 var txt = File.ReadAllText(mp.FullName).Substring("Library Member Name", "Library Totals"); var ns = txt.Trim().Split("\r\n"); var objs = ns.Select(e => e.Split().Last()).Where(e => e.EndsWith(".o")).ToArray(); // 找到原始对象文件 var list = new List <String>(); foreach (var obj in objs) { // 注意,不同目录可能有同名对象文件,所以需要同时在两个目录里面找 var fs = FindObjs(obj, debug); if (fs.Length > 0) { foreach (var item in fs) { // 无法识别需要哪个同名文件,全部加入 if (!list.Contains(item)) { list.Add(item); } } } } Console.WriteLine("objs={0} list={1}", objs.Length, list.Count); // 引入基础库以及核心库的全部对象 var bs = Root.CombinePath("Tool/Obj"); if (debug) { bs += "D"; } foreach (var item in bs.CombinePath("Core").AsDirectory().GetAllFiles("*.o")) { if (!list.Contains(item.FullName)) { list.Add(item.FullName); } } foreach (var item in bs.CombinePath("Kernel").AsDirectory().GetAllFiles("*.o")) { if (!list.Contains(item.FullName)) { list.Add(item.FullName); } } list.Sort(); //Objs = list; // 链接打包 name = "SmartOS"; if (debug) { name += "D"; } var lib = Temp.CombinePath(name + ".lib"); BuildLib(lib, list); Objs.Add(lib); }