feedforward 发表于 2020-3-13 13:49:43

codeblocks条件编译代码显示问题

          codeblocks有一个很好的功能:它能根据宏定义讲将条件编译的代码显示为不同的颜色,满足编译条件的代码正常显示,不满足编译条件的代码显示为淡灰色。但是近日用codeblocks调试nuttx发现一个问题:codeblocks的editor在显示条件编译代码时只能识别本文件内定义的宏,对本文件包含的头文件中的宏定义一概忽略:

关于CHIP_NUARTS的条件编译代码显示异常


      代码颜色似乎说明CHIP_NUARTS定义为0(即未定义),但实际上在头文件<arch/board/board.h>中已经将CHIP_NUARTS定义为3了,而且整个代码编译正常,可见codeblocks的editor未能识别<arch/board/board.h>中CHIP_NUARTS的定义!
       首先为怀疑是arch/board/board.h的路径问题,因为arch/board/board.h是一个软连接(Symbolic link),可能codeblocks的editor无法正常搜索软连接中的内容。因此我将nuttx/tools/link.sh中连接命令的参数由软连接改为硬连接:
即将:ln -s "${src}" "${dest}" || { echo "Failed to create link: $dest" ; exit 1 ; }                        修改为 :ln "${src}" "${dest}" || { echo "Failed to create link: $dest" ; exit 1 ; }      
      然而配置nuttx时报错:不能对目录进行硬连接! 经查询资料,linux确实不支持对目录进行硬连接。无可奈何,最终选了一个邪路:不用软连接,而是真正复制文件,建立真是目录:具体措施为:将nuttx/tools/link.sh中连接命令改为复制命令:
即将:ln -s "${src}" "${dest}" || { echo "Failed to create link: $dest" ;   exit 1 ; }                        修改为 :cp -r"${src}" "${dest}" || { echo"Failed to create link: $dest" ; exit 1 ; }      
      再次配置nuttx,虽然速度慢了点(要真实复制很多文件)但却成功了,之后make oldconfig、make menuconfig、make均成功:

执行make时复制的目录才最终显示出来


      再次在codeblocks中打开NuttX工程,这下原来无法显示的软连接可以显示了(因为变成了真实目录):

board.h在codeblocks工程树中正常显示


      然而,editor中条件编译代码的显示依然是那个鸟样!!!
   为了验证这确实是codeblocks的一个问题,我重新建立了一个最简单的新工程,只有一个c文件,一个h文件,结果问题依旧,c文件中的条件编译识别不了h文件中的宏定义,而宏直接在c文件中定义则能正常识别。
    折腾了两天,问题未能解决,最后只能忍痛不使用codeblocks的条件编译灰色显示功能,即在editor设置中关闭该功能:

取消非激活代码灰色显示复选框


之后似然代码阅读虽然没那么方便,但总比被editor误导要好:   

关闭非激活代码灰色显示功能后的显示效果


      折腾两天最终未能解决codeblocks的这个问题,但codeblocks仍不失为一个好工具,哪位大神能解决该问题请联系我,必有重谢!

页: [1]
查看完整版本: codeblocks条件编译代码显示问题