/// <summary>链接静态库</summary> /// <returns></returns> protected override String OnBuild(String name) { /* * -mcpu=cortex-m3 -mthumb -g --specs=nano.specs -nostartfiles * -Wl,-Map=$(BIN_DIR)/application.map -Os -Wl,--gc-sections -Wl,--cref -Wl,--entry=Reset_Handler -Wl,--no-enum-size-warning -Wl,--no-wchar-size-warning * $(LFLAGS) -o $(BIN_DIR)/$(TARGET).axf $(OBJ_LIST) $(OBJ_DIR)/ram_1.r.o $(LIBFLAGS) -T./rlx8195A-symbol-v02-img2.ld */ var lstName = GetListPath(name); var objName = GetObjPath(name); var sb = new StringBuilder(); // 指定CPU和指令集 if (!CPU.IsNullOrEmpty()) { sb.AppendFormat("-mcpu={0}", CPU.ToLower()); } // 指定优化等级 sb.AppendFormat(" -O{0}", Debug ? 0 : 3); if (!Specs.IsNullOrEmpty()) { sb.AppendFormat(" --specs={0}", Specs); } // 只链接静态库,不找动态库 sb.Append(" -static"); if (!Entry.IsNullOrEmpty()) { sb.AppendFormat(" -Wl,--entry={0}", Entry); } sb.Append(" -Wl,--cref"); // 链接时输出详细过程 if (LinkVerbose) { sb.Append(" -Wl,--verbose"); } // 为每个函数和数据项分配独立的段 //sb.Append(" -ffunction-sections -fdata-sections"); // 删除未使用段 sb.AppendFormat(" -Wl,--gc-sections"); // Linux风格,4字节枚举、有符号字符 if (Linux) { sb.Append(" -Wl,--no-enum-size-warning -Wl,--no-wchar-size-warning"); } // 调试版打开所有警告 if (Debug) { sb.Append(" -W -Wall -g2"); } else { sb.Append(" -w"); } var icf = Scatter; if (icf.IsNullOrEmpty()) { icf = ".".AsDirectory().GetAllFiles("*.ld", false).FirstOrDefault()?.Name; } if (!icf.IsNullOrEmpty() && File.Exists(icf.GetFullPath())) { sb.AppendFormat(" -T\"{0}\"", icf); } var axf = objName.EnsureEnd(".axf"); sb.AppendFormat(" -Wl,-Map=\"{0}.map\" -o \"{1}\"", lstName, axf); //sb.AppendFormat(" -o \"{0}\"", axf); sb.Append(" -Xlinker \"-(\""); return(sb.ToString()); }