@@ -252,11 +252,13 @@ def clean_project(self) -> bool:
252252 cwd = os .path .dirname (self .iar_project_path ) if self .iar_project_path else None # 设置工作目录
253253 )
254254
255+ logger .info (f"清理命令返回码: { result .returncode } " )
255256 if result .returncode == 0 :
256- logger .info ("项目清理成功" )
257+ logger .info ("项目清理成功(返回码 0) " )
257258 return True
258259 else :
259- logger .error (f"项目清理失败: { result .stderr } " )
260+ logger .error (f"项目清理失败(返回码 { result .returncode } )" )
261+ logger .error (f"错误输出: { result .stderr } " )
260262 return False
261263
262264 except subprocess .TimeoutExpired :
@@ -303,18 +305,28 @@ def build_project(self, force_rebuild: bool = False) -> Tuple[bool, str]:
303305 self .build_config
304306 ]
305307
306- logger .info (f"执行命令: { ' ' .join (cmd )} " )
308+ # 打印完整的编译命令(重要:便于用户确认使用的项目文件)
309+ logger .info ("=" * 80 )
310+ logger .info ("IAR编译命令:" )
311+ logger .info (f" 完整命令: { ' ' .join (cmd )} " )
312+ logger .info (f" 工作目录: { os .path .dirname (self .iar_project_path ) if self .iar_project_path else 'None' } " )
313+ logger .info ("=" * 80 )
307314
308- # 调试信息
309- logger .info (f"IAR可执行文件路径: { self .iar_exe_path } " )
310- logger .info (f"项目文件路径: { self .iar_project_path } " )
311- logger .info (f"工作目录: { os .path .dirname (self .iar_project_path ) if self .iar_project_path else None } " )
315+ # 验证项目文件是否正确
316+ if self .iar_project_path :
317+ logger .info (f"使用项目文件: { self .iar_project_path } " )
318+ logger .info (f"项目文件存在: { os .path .exists (self .iar_project_path )} " )
319+ if os .path .exists (self .iar_project_path ):
320+ file_size = os .path .getsize (self .iar_project_path )
321+ logger .info (f"项目文件大小: { file_size } 字节" )
322+ else :
323+ logger .error ("项目文件路径为空!" )
312324
313325 # 检查文件是否存在
314326 if not os .path .exists (self .iar_exe_path ):
315- return False , f"IAR可执行文件不存在: { self .iar_exe_path } "
327+ return False , f"IAR可执行文件不存在: { self .iar_exe_path } \n 尝试使用的项目文件: { self . iar_project_path } "
316328 if not os .path .exists (self .iar_project_path ):
317- return False , f"项目文件不存在: { self .iar_project_path } "
329+ return False , f"项目文件不存在: { self .iar_project_path } \n 请检查项目路径是否正确 "
318330
319331 # 执行编译
320332 start_time = time .time ()
@@ -354,7 +366,11 @@ def build_project(self, force_rebuild: bool = False) -> Tuple[bool, str]:
354366 )
355367
356368 # 如果成功执行,跳出循环
357- logger .info (f"编译尝试 { attempt + 1 } 成功执行,返回码: { result .returncode } " )
369+ logger .info (f"编译尝试 { attempt + 1 } 完成,返回码: { result .returncode } " )
370+ logger .info (f"返回码 { result .returncode } 表示: { '编译成功' if result .returncode == 0 else '编译失败' } " )
371+ if result .returncode != 0 :
372+ logger .error (f"编译失败,返回码: { result .returncode } " )
373+ logger .error (f"错误输出: { result .stderr [:500 ]} " )
358374 break
359375
360376 except PermissionError as e :
@@ -381,14 +397,18 @@ def build_project(self, force_rebuild: bool = False) -> Tuple[bool, str]:
381397 logger .info (f"编译耗时: { compile_time :.2f} 秒" )
382398
383399 # 分析编译结果
400+ logger .info (f"编译命令返回码: { result .returncode } " )
401+
402+ # 准备编译命令信息字符串(用于GUI显示,不包含输出)
403+ cmd_info = f"使用项目文件: { self .iar_project_path } \n 命令: { ' ' .join (cmd )} \n "
404+
384405 if result .returncode == 0 :
385- logger .info ("编译成功" )
386- output_info = f"编译成功\n 耗时: { compile_time :.2f} 秒\n \n 输出信息:\n { result .stdout } "
387- return True , output_info
406+ logger .info ("编译成功(返回码 0)" )
407+ return True , f"编译成功,耗时: { compile_time :.2f} 秒"
388408 else :
389- logger .error ("编译失败" )
390- error_info = f"编译失败 \n 返回码 : { result .returncode } \n \n 错误信息: \n { result .stderr } \n \n 输出信息: \n { result . stdout } "
391- return False , error_info
409+ logger .error (f "编译失败(返回码 { result . returncode } ) " )
410+ logger . error ( f"错误输出 : { result .stderr [: 500 ] if result .stderr else '无错误输出' } " )
411+ return False , f"编译失败,返回码: { result . returncode } "
392412
393413 except subprocess .TimeoutExpired :
394414 logger .error ("编译超时" )
@@ -486,6 +506,25 @@ def build_and_check(self) -> Tuple[bool, str, dict]:
486506
487507 return success , message , bin_info
488508
509+ def get_command_string (self , only_version_changed : bool = True ) -> str :
510+ """
511+ 获取编译命令字符串(用于GUI显示)
512+
513+ Args:
514+ only_version_changed: 是否只有版本号发生变化
515+
516+ Returns:
517+ str: 编译命令字符串
518+ """
519+ should_clean = self .clean_before_build or (not only_version_changed )
520+
521+ if should_clean :
522+ cmd = [self .iar_exe_path , self .iar_project_path , '-build' , self .build_config ]
523+ else :
524+ cmd = [self .iar_exe_path , self .iar_project_path , '-make' , self .build_config ]
525+
526+ return ' ' .join (cmd )
527+
489528 def smart_build (self , only_version_changed : bool = True ) -> Tuple [bool , str ]:
490529 """
491530 智能编译:根据修改内容决定编译策略
@@ -497,10 +536,8 @@ def smart_build(self, only_version_changed: bool = True) -> Tuple[bool, str]:
497536 Tuple[bool, str]: (编译是否成功, 输出信息)
498537 """
499538 if only_version_changed :
500- logger .info ("检测到仅版本号变化,使用增量编译(make)" )
501539 return self .build_project (force_rebuild = False )
502540 else :
503- logger .info ("检测到代码变化,使用清理编译(rebuild all)" )
504541 return self .build_project (force_rebuild = True )
505542
506543
0 commit comments