Exemple #1
0
        void BuildLib(String lib, ICollection <String> objs)
        {
            if (Ar.IsNullOrEmpty())
            {
                Ar = @"D:\Keil\ARM\ARMCC\bin\armar.exe";
            }
            lib.EnsureDirectory(true);

            var sb = new StringBuilder();

            sb.Append("--create -c");
            sb.AppendFormat(" -r \"{0}\"", lib);

            foreach (var item in objs)
            {
                sb.Append(" ");
                sb.Append(item);
                Console.WriteLine(item);
            }

            var rs = Ar.Run(sb.ToString(), 3000, XTrace.WriteLine);
        }
Exemple #2
0
        /// <summary>编译静态库</summary>
        /// <param name="name"></param>
        public Int32 BuildLib(String name = null)
        {
            if (Objs.Count == 0)
            {
                return(0);
            }

            var ext = Path.GetExtension(name);

            if (!ext.IsNullOrEmpty())
            {
                name = name.TrimEnd(ext);
            }

            name = GetOutputName(name);
            XTrace.WriteLine("链接:{0}", name);

            if (ext.IsNullOrEmpty())
            {
                ext = ".lib";
            }
            var lib = name.EnsureEnd(ext);
            var sb  = new StringBuilder();

            sb.Append(OnBuildLib(lib));

            Console.Write("链接参数:");
            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.WriteLine(sb);
            Console.ResetColor();

            if (Objs.Count < 6)
            {
                Console.Write("使用对象文件:");
            }
            foreach (var item in Objs)
            {
                sb.Append(" ");
                sb.Append(item);
                if (Objs.Count < 6)
                {
                    Console.Write(" {0}", item);
                }
            }
            if (Objs.Count < 6)
            {
                Console.WriteLine();
            }

            LoadLib(sb);

            var rs = Ar.Run(sb.ToString(), 3000, WriteLog);

            XTrace.WriteLine("链接完成 {0} {1}", rs, lib);

            if (name.Contains("\\"))
            {
                name = name.Substring("\\");
            }
            var p = name.LastIndexOf("\\");

            if (p >= 0)
            {
                name = name.Substring(p + 1);
            }
            name = name.Replace("_", " ");
            if (rs == 0)
            {
                "链接静态库{0}完成".F(name).SpeakAsync();
            }
            else
            {
                "链接静态库{0}失败".F(name).SpeakAsync();
            }

            return(rs);
        }