private void CreateLinkTarget(Link link, IList<LogQueueItem> messages)
        {
            Target target = new Target();
            //Установка опций по умолчанию
            target.SeTLPC2478DefaultOptions();

            target.Name = Path.GetFileNameWithoutExtension(link.Name);

            target.Options.GenApp = TWO_STATE_BOOL.ENABLED;
            target.Options.GenLib = TWO_STATE_BOOL.DISABLED;

            target.Options.ADSFLGA = "226,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";

            //target.Options.OCR_RVCT = "1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,1,0,0,0,0,224,127,0,64,0,0";
            target.Options.ADSCCFLG.ARM_Thumb_Interworking = uVision.Project.THREE_STATE_BOOL.DISABLED;
            target.Options.ADSASFLG = "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";
            
            target.Options.ADSLDFG = "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";

            target.Options.ADSLDTA = "";
            target.Options.ADSLDDA = "";
            target.Options.Debug = "1";
            target.Options.Browse = "1";


            //Исключаем все файлы из построения
            foreach (PKStudio.uVision.Project.File f in uVisionProject.FileList.Values)
            {
                //if ((f.Type == uVision.Project.File.FILE_TYPE.C_FILE) || (f.Type == uVision.Project.File.FILE_TYPE.CPP_FILE) || (f.Type == uVision.Project.File.FILE_TYPE.ASM_FILE))
                //{
                PKStudio.uVision.Project.FileOptions fileopt = new uVision.Project.FileOptions(f);
                fileopt.IncBld = THREE_STATE_BOOL.DISABLED;
                target.FilesOpton.Add(fileopt);
                //}
            }

            target.Options.OutDir = Path.GetDirectoryName(link.OutputFileMSBuild) + "\\";
            target.Options.OutName = Path.GetFileNameWithoutExtension(link.OutputFileMSBuild);
            link.OutputFileuVision = link.OutputFileMSBuild;

            foreach (RequiredObject obj in link.InputObjects.Values)
            {
                this.AddCompileFile(obj, target);
            }


            foreach (RequiredLibrary lib in link.InputLibraries.Values)
            {
                PKStudio.uVision.Project.FileOptions fileOpt = target.FindFileOptions(lib.OutputFileuVision);
                fileOpt.IncBld = THREE_STATE_BOOL.ENABLED;
            }

            //string LinkString = ARMLINKPath;

            foreach (ArgCollection arg in link.ParamCollection.Values)
            {
                if (arg.Tag == "options")
                {
                    switch (arg.Name)
                    {
                        //Ничего не надо записывать, так ккак все пути будут содержаться в файл листе
                        case "--userlibpath":
                            break;
                        case "--scatter":
                            target.Options.ADSLDSC = arg[0];
                            break;
                        case "--device":
                            break;
                        default:
                            if (arg.Count > 0)
                            {
                                foreach (string s in arg)
                                {
                                    //LinkString += " " + arg.Name + " " + s;
                                    target.Options.ADSLDMC.Add(arg.Name + " " + s);
                                }
                            }
                            //else LinkString += " " + arg.Name;
                            else target.Options.ADSLDMC.Add(arg.Name);
                            break;
                    }
                }
            }

            //foreach (BuildBase bb in link.AllInputs.Values)
            //{
            //    LinkString += " " + bb.OutputFileuVision;
            //}

            //target.AfterBuild.Add(LinkString);


            //Добавляем fromelf
            foreach (LogQueueItem item in messages)
            {
                if (item.Message.ToLower().Contains(ARMFROMELFPath))
                {
                    target.AfterBuild.Add(item.Message);
                }
            }

            target.Num = uVisionProject.TargetList.Count + 1;
            uVisionProject.TargetList.Add(target.Num, target);

            if (target.BeforeBuild.Count > 0)
            {
                target.Options.BrunUsr_0.Run = TWO_STATE_BOOL.ENABLED;
                target.Options.BrunUsr_0.Command = ".\\BatFiles\\Prebuild" + @"\" + target.Name + ".bat";
            }

            if (target.AfterBuild.Count > 0)
            {
                target.Options.RunUsr_0.Run = TWO_STATE_BOOL.ENABLED;
                target.Options.RunUsr_0.Command = ".\\BatFiles\\Postbuild" + @"\" + target.Name + ".bat";
            }

        }
        //private void CreateBrowseTarget(Link link)
        //{
        //    Target target = new Target();
        //    //Установка опций по умолчанию
        //    target.SeTLPC2478DefaultOptions();

        //    target.Name = "Browse";
        //    target.Options.OutDir += uVisionTargetsPath + "\\" + target.Name + "\\";
        //    target.Options.OutName = Path.GetFileNameWithoutExtension(target.Name);

        //    target.Options.GenApp = TWO_STATE_BOOL.DISABLED;
        //    target.Options.GenLib = TWO_STATE_BOOL.DISABLED;

        //    target.Options.ADSFLGA = "226,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";

        //    target.Options.ADSCCFLG.ARM_Thumb_Interworking = uVision.Project.THREE_STATE_BOOL.DISABLED;
        //    target.Options.ADSASFLG = "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";

        //    target.Options.Debug = "0";
        //    target.Options.Browse = "0";


        //    //Исключаем все файлы из построения
        //    foreach (PKStudio.uVision.Project.File f in uVisionProject.FileList.Values)
        //    {
        //        PKStudio.uVision.Project.FileOptions fileopt = new uVision.Project.FileOptions(f);
        //        fileopt.IncBld = THREE_STATE_BOOL.DISABLED;
        //        target.FilesOpton.Add(fileopt);
        //    }

        //    SortedList<int, RequiredObject> ReqObjs = link.GetAllRequiredObjects();

        //    foreach (RequiredObject obj in ReqObjs.Values)
        //    {
        //        this.AddCompileFile(obj, target);
        //    }

        //    target.Num = uVisionProject.TargetList.Count + 1;
        //    uVisionProject.TargetList.Add(target.Num, target);
        //}

        //private void CreateLinkTarget(Link link, IList<LogQueueItem> messages)
        //{
        //    Target target = new Target();
        //    //Установка опций по умолчанию
        //    target.SeTLPC2478DefaultOptions();

        //    target.Name = "Link";

        //    target.Options.GenApp = TWO_STATE_BOOL.DISABLED;
        //    target.Options.GenLib = TWO_STATE_BOOL.DISABLED;

        //    target.Options.ADSFLGA = "226,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";

        //    //target.Options.OCR_RVCT = "1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,1,0,0,0,0,224,127,0,64,0,0";

        //    //target.Options.ADSLDFG = "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";

        //    target.Options.ADSLDTA = "";
        //    target.Options.ADSLDDA = "";

        //    //Исключаем все файлы из построения
        //    foreach (PKStudio.uVision.Project.File f in uVisionProject.FileList.Values)
        //    {
        //        if ((f.Type == uVision.Project.File.FILE_TYPE.C_FILE) || (f.Type == uVision.Project.File.FILE_TYPE.CPP_FILE) || (f.Type == uVision.Project.File.FILE_TYPE.ASM_FILE))
        //        {
        //            PKStudio.uVision.Project.FileOptions fileopt = new uVision.Project.FileOptions(f);
        //            fileopt.IncBld = THREE_STATE_BOOL.DISABLED;
        //            target.FilesOpton.Add(fileopt);
        //        }
        //    }

        //    target.Options.OutDir = Path.GetDirectoryName(link.OutputFileMSBuild) + "\\";
        //    target.Options.OutName = Path.GetFileNameWithoutExtension(link.OutputFileMSBuild);
        //    link.OutputFileuVision = link.OutputFileMSBuild;

        //    string LinkString = ARMLINKPath;

        //    foreach (ArgCollection arg in link.ParamCollection.Values)
        //    {
        //        if (arg.Tag == "options")
        //        {
        //            switch (arg.Name)
        //            {
        //                //Ничего не надо записывать, так ккак все пути будут содержаться в файл листе
        //                case "--userlibpath":
        //                    break;
        //                default:
        //                    if (arg.Count > 0)
        //                    {
        //                        foreach (string s in arg)
        //                        {
        //                            LinkString += " " + arg.Name + " " + s;
        //                        }
        //                    }
        //                    else LinkString += " " + arg.Name;
        //                    break;
        //            }
        //        }
        //    }
        //    //foreach (RequiredLibrary lib in link.InputLibraries)
        //    //{
        //    //    LinkString += " --userlibpath " + Path.GetDirectoryName(lib.OutputFileuVision);
        //    //}

        //    //foreach (RequiredObject obj in link.InputObjects)
        //    //{
        //    //    LinkString += " --userlibpath " + Path.GetDirectoryName(obj.OutputFileuVision);
        //    //}

        //    //foreach (RequiredLibrary lib in link.InputLibraries)
        //    //{
        //    //    LinkString += " " + Path.GetFileName(lib.OutputFileuVision);
        //    //}

        //    //foreach (RequiredObject obj in link.InputObjects)
        //    //{
        //    //    LinkString += " " + Path.GetFileName(obj.OutputFileuVision);
        //    //}

        //    foreach (BuildBase bb in link.AllInputs.Values)
        //    {
        //        LinkString += " " + bb.OutputFileuVision;
        //    }

        //    //foreach (RequiredLibrary lib in link.InputLibraries)
        //    //{
        //    //    LinkString += " " + lib.OutputFileuVision;
        //    //}

        //    //foreach (RequiredObject obj in link.InputObjects)
        //    //{
        //    //    LinkString += " " + obj.OutputFileuVision;
        //    //}

        //    target.AfterBuild.Add(LinkString);


        //    //Добавляем fromelf
        //    foreach (LogQueueItem item in messages)
        //    {
        //        if (item.Message.ToLower().Contains(ARMFROMELFPath))
        //        {
        //            target.AfterBuild.Add(item.Message);
        //        }
        //    }

        //    target.Num = uVisionProject.TargetList.Count + 1;
        //    uVisionProject.TargetList.Add(target.Num, target);

        //    if (target.BeforeBuild.Count > 0)
        //    {
        //        target.Options.BrunUsr_0.Run = TWO_STATE_BOOL.ENABLED;
        //        target.Options.BrunUsr_0.Command = ".\\BatFiles\\Prebuild\\" + @"\" + target.Name + ".bat";
        //    }

        //    if (target.AfterBuild.Count > 0)
        //    {
        //        target.Options.RunUsr_0.Run = TWO_STATE_BOOL.ENABLED;
        //        target.Options.RunUsr_0.Command = ".\\BatFiles\\Postbuild\\" + @"\" + target.Name + ".bat";
        //    }

        //}

        private void AddCompileFile(RequiredObject obj, Target target)
        {
            string DefaultWorkingDir = Directory.GetCurrentDirectory();
            Directory.SetCurrentDirectory(obj.CurrentDir);
            foreach (string path in obj.ParamCollection.Files.Values)
            {
                PKStudio.uVision.Project.FileOptions fileOpt = target.FindFileOptions(Path.GetFullPath(ExpandPath(path)));
                if (fileOpt == null) throw new Exception("Can't find file options");


                fileOpt.IncBld = THREE_STATE_BOOL.ENABLED;

                foreach (ArgCollection arg in obj.ParamCollection.Values)
                {
                    if (arg.Tag != "options") continue;
                    switch (arg.Name)
                    {
                        case "-I":
                            foreach (string include in arg)
                            {
                                fileOpt.Include.Add(include);
                            }
                            break;
                        case "-D":

                            foreach (string def in arg)
                            {
                                if (!def.Contains("="))
                                    fileOpt.Define.Add(def);
                                else
                                    fileOpt.Misc.Add("-D" + def);
                            }

                            break;
                        case "--PD":
                            foreach (string def in arg)
                            {
                                if (fileOpt.File.Type == uVision.Project.File.FILE_TYPE.ASM_FILE)
                                    fileOpt.Misc.Add("--PD " + def);
                            }
                            break;
                        case "--split_sections":
                            fileOpt.ADSCCFLG.One_EFL_Section_per_Function = uVision.Project.THREE_STATE_BOOL.ENABLED;
                            break;
                        //case "--fpu":
                        //    fileOpt.Misc.Add("--fpu " + arg[0]);
                        //    break;
                        case "--littleend":
                            fileOpt.Misc.Add("--littleend");
                            break;
                        case "-c":
                            break;
                        case "--cpp":
                            fileOpt.Misc.Add("--cpp");
                            break;
                        case "-O":
                            PKStudio.uVision.Project.OPTIMIZATION tmp = PKStudio.uVision.Project.OPTIMIZATION.Default;
                            switch (arg[0])
                            {
                                case "0":
                                    tmp = PKStudio.uVision.Project.OPTIMIZATION.Level0;
                                    break;
                                case "1":
                                    tmp = PKStudio.uVision.Project.OPTIMIZATION.Level1;
                                    break;
                                case "2":
                                    tmp = PKStudio.uVision.Project.OPTIMIZATION.Level2;
                                    break;
                                case "3":
                                    tmp = PKStudio.uVision.Project.OPTIMIZATION.Level3;
                                    break;
                                default:
                                    break;
                            }
                            fileOpt.ADSCCFLG.Optimisation = tmp;
                            break;
                        case "--diag_suppress":
                            foreach (string item in arg)
                            {
                                //if (!target.Options.ADSCMISC.Contains("--diag_suppress " + item))
                                //{
                                fileOpt.Misc.Add("--diag_suppress " + item);
                                //}
                            }

                            break;
                        //Этот параметр игнорируем, така uVision IDE его подставляет по умолчанию
                        case "--device":
                            break;
                        //Этот параметр обраюатываем особо
                        case "-o":
                            //obj.OutputFileuVision = uVisionProjectPath + target.Options.OutDir.Replace(".", "") + Path.GetFileNameWithoutExtension(arg[0]) + ".o ";
                            break;
                        //case "--LIST":
                        //case "--list":
                        //s = "IF NOT EXIST " + Path.GetDirectoryName(arg[0]) + " md " + Path.GetDirectoryName(arg[0]);
                        //if (!target.BeforeBuild.Contains(s))
                        //    target.BeforeBuild.Add(s);
                        //break;
                        default:
                            string str = arg.Name;
                            foreach (string item in arg)
                            {
                                str += " " + item;
                            }
                            fileOpt.Misc.Add(str);
                            break;
                    }
                }
            }
            Directory.SetCurrentDirectory(DefaultWorkingDir);
        }
        private void CreateObjectTartet(RequiredObject obj)
        {
            Target target = new Target();
            //Установка опций по умолчанию
            target.SeTLPC2478DefaultOptions();

            target.Name = Path.GetFileNameWithoutExtension(obj.Name);
            target.Options.OutDir += uVisionTargetsPath + "\\" + target.Name + "\\";
            target.Options.OutName = Path.GetFileNameWithoutExtension(obj.Name);

            target.Options.GenApp = TWO_STATE_BOOL.DISABLED;
            target.Options.GenLib = TWO_STATE_BOOL.ENABLED;

            target.Options.ADSFLGA = "226,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";

            target.Options.ADSCCFLG.ARM_Thumb_Interworking = uVision.Project.THREE_STATE_BOOL.DISABLED;
            target.Options.ADSASFLG = "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";

            target.Options.Debug = "1";
            target.Options.Browse = "1";

            //Исключаем все файлы из построения
            foreach (PKStudio.uVision.Project.File f in uVisionProject.FileList.Values)
            {
                PKStudio.uVision.Project.FileOptions fileopt = new uVision.Project.FileOptions(f);
                fileopt.IncBld = THREE_STATE_BOOL.DISABLED;
                target.FilesOpton.Add(fileopt);
            }

            this.AddCompileFile(obj, target);


            target.Num = uVisionProject.TargetList.Count + 1;
            uVisionProject.TargetList.Add(target.Num, target);

            if (target.BeforeBuild.Count > 0)
            {
                target.Options.BrunUsr_0.Run = TWO_STATE_BOOL.ENABLED;
                target.Options.BrunUsr_0.Command = ".\\BatFiles\\Prebuild" + @"\" + target.Name + ".bat";
            }

            if (target.AfterBuild.Count > 0)
            {
                target.Options.RunUsr_0.Run = TWO_STATE_BOOL.ENABLED;
                target.Options.RunUsr_0.Command = ".\\BatFiles\\Postbuild" + @"\" + target.Name + ".bat";
            }
        }