最近碰到了一个困扰我很久的奇怪问题问题,最终研究发现这应该算是设计上“又不是不能用”引发的悲剧。
简单的说简单的说问题是这样的,我需要在 DSC 文件中修改一个PCD 定义:问题是这样的,我需要在 DSC 文件中修改一个PCD 定义:
gChipsetPkgTokenSpaceGuid.PcdLABZBuild|FALSE
于是将代码修改为:
#LABZDebug gChipsetPkgTokenSpaceGuid.PcdLABZBuild|FALSE
gChipsetPkgTokenSpaceGuid.PcdLABZBuild|TRUE
实际测试下来问题依旧存在,检查 Build 目录生成的中间代码最终确定是上述的修改没有起效。最终翻来覆去看代码,终于发现批处理使用如下代码来识别赋值:
findstr /C:"gChipsetPkgTokenSpaceGuid.PcdLABZBuild|FALSE" %WORKSPACE%\%PROJECT_REL_PATH%\%PROJECT_PKG%\Project.dsc >nul
因为被注释掉的代码在文件位置靠前,这个语句会把它当作正式的设定,所以导致了问题。
通常来说,本科计算机系毕业生足以编写能够实现 Parser 的代码,但是如果仅仅以“又不是不能用”作为标准来编写代码将会给使用者带来极大的麻烦。当然,如果使用者仍然遵循“又不是不能用”的逻辑来处理,还可以将代码写为如下形式,只是不知道下一个接手者是否会再撞上奇怪的问题:
gChipsetPkgTokenSpaceGuid.PcdLABZBuild|TRUE
#LABZDebug gChipsetPkgTokenSpaceGuid.PcdLABZBuild|FALSE