改完工程选项后,编译日志里仍少了几条警告,先核对正在使用的构建配置。TASKING将C、C++、汇编和链接阶段的诊断选项分开放置;同一工程的Debug与Release配置也可能不同。下面以TASKING的Eclipse工程界面为例,按设置入口和警告编号逐项检查。
一、TASKING怎么设置编译器诊断等级
TASKING将诊断信息区分为错误、警告、信息等类别。工程界面没有统一的诊断等级滑块;实际操作是调整警告抑制、C++备注信息及警告转错误等选项。
1、找到正在使用的配置
①在工程资源管理器中右键点击目标工程,选择【Properties】。
②依次点击【C/C++Build】→【Settings】,核对【Configuration】中的配置名称。
③点击【Tool Settings】→【C/C++Compiler】→【Diagnostics】。
2、恢复C编译警告
①在【Diagnostics】页面取消勾选【Suppress all warnings】。
②查看【Suppress C compiler warnings】,选中需要恢复的警告编号,点击【Delete】。
③点击【Apply and Close】保存。若还需调整其他构建配置,切换【Configuration】后重复操作。
3、设置C++警告与备注
①在【Suppress C++compiler warnings】中选中误屏蔽的编号,点击【Delete】。
②如需显示变量先使用后赋值的警告,取消勾选【Suppress C++compiler“used before set”warnings】。
③如需查看C++备注信息,勾选【Issue remarks on C++code】,点击【Apply and Close】。
4、核对其他编译检查
①在【C/C++Compiler】→【Diagnostics】中查看【Perform global type checking on C code】。
②如项目需要全局类型检查,勾选该项,点击【Apply and Close】。
③记录本次改动对应的【Configuration】,以便稍后核对构建结果。
5、重新构建并打开诊断视图
①点击【Project】→【Clean...】,选择目标工程,勾选【Start a build immediately】。
②点击【Clean】,等待构建完成。
③依次点击【Window】→【Show View】→【Other...】→【TASKING】→【Problems】,查看新生成的消息。
二、TASKING部分警告信息没有显示如何调整
只少了某几条警告时,先确认目标文件确实重新编译,再检查实际命令和源文件中的屏蔽设置。仅修改选项而没有重新构建,不会让旧的编译结果补出警告。TASKING可在构建日志中显示各工具的实际调用命令。
1、确认目标文件参与构建
①右键点击工程,进入【Properties】→【C/C++Build】→【Settings】,核对【Configuration】。
②在工程资源管理器中找到目标源文件,核对它所在的工程。
③点击【Project】→【Clean...】,选中该工程并勾选【Start a build immediately】,再点击【Clean】。
④打开【Console】,确认日志中出现该文件的编译记录。
2、查看命令中的警告抑制参数
①进入【Properties】→【C/C++Build】→【Settings】→【Global Options】。
②勾选【Verbose mode of control program】,点击【Apply and Close】,重新构建。
③打开【Console】,在目标文件的编译命令中查找-w或--no-warnings。
④若参数不带编号,返回【Diagnostics】检查全局屏蔽;若带编号,在对应的C或C++警告列表中选中编号并点击【Delete】。
3、检查手动填写的附加选项
①打开【Settings】→【Tool Settings】→【C/C++Compiler】→【Miscellaneous】。
②查看【Additional options】中是否手动填写了-w或--no-warnings。
③删除不需要的屏蔽参数,点击【Apply and Close】,重新构建并核对命令。
4、排查源文件中的局部屏蔽
①打开对应的C源文件,按【Ctrl+F】搜索#pragma warning。
②检查目标代码上方是否写入了警告编号,或使用了不带编号的屏蔽语句。
③删除不需要的语句;需要在后续代码恢复默认警告设置时,插入#pragma warning default。
④保存文件并重新构建,核对目标警告编号。源文件中的这类设置可以覆盖编译选项。
5、检查汇编和链接阶段
①在【Console】中确认预期的警告属于编译、汇编还是链接阶段。
②若是汇编警告,进入【Tool Settings】→【Assembler】→【Diagnostics】,检查【Suppress all warnings】和【Suppress warnings】。
③若是链接警告,进入【Linker】→【Diagnostics】,检查同名选项。
④选中误屏蔽的编号,点击【Delete】,保存后重新构建。
6、检查规则提示开关
①若缺少MISRA C提示,打开【C/C++Compiler】→【MISRA C】,检查【MISRA C checking】和规则版本。
②若缺少CERT C提示,打开【C/C++Compiler】→【CERT C Secure Coding】,检查【CERT C secure code checking】。
③点击【Apply and Close】,执行【Project】→【Clean...】,再查看【Problems】中的规则消息。
三、如何确认警告已经恢复
选择一条有明确编号的消息作为参照,同时记下源文件和构建配置。查看结果时也要留意消息是否被归入错误项,以免只在警告列表中查找。
1、查看诊断详情
①在【Problems】中找到相关消息,记录编号及源文件。
②右键点击该消息,选择【Detailed Diagnostics Info】,查看详细说明。
③返回对应工具的【Diagnostics】,按编号核对抑制列表。
2、核对警告显示方式
①打开【Settings】→【Tool Settings】→【Global Options】,查看【Treat warnings as errors】。
②如已勾选,到【Problems】的错误项和【Console】中查找相同编号。
③按工程要求保留或取消该选项,点击【Apply and Close】,重新构建核对。
3、记录两套配置的差异
①在【Console】中记录目标文件的编译命令和警告编号。
②在【Settings】中记录当前【Configuration】及各【Diagnostics】中的抑制编号。
③切换构建配置后再次核对这些项目,并执行【Project】→【Clean...】复查。
总结
警告没有出现时,把编号、源文件和实际编译命令放在一起核对,通常能更快找到是哪一处设置影响了结果。保留构建配置与抑制编号的记录,之后切换Debug、Release,或由其他成员接手工程时,也更容易看清差异。希望这份操作说明对大家有帮助;如有TASKING相关需求,欢迎联系我们咨询。