一、问题描述

在ubuntu系统中,通常习惯用VScode作为IDE来阅读或修改代码,使用VScode打开工程后,通常需要对c_cpp_properties.json、settings.json、tasks.json等等进行配置,在正确的设置好路径后,基本能解决掉程序中的大部分报错。在阅读Fast-Lio代码时,发现依然有一个错误: 未定义标识符“ROOT_DIR”。如下图

二、分析原因

经查看程序,认为“ROOT_DIR”是一个宏,然而在各个头文件中并未找到其定义。最后发现“ROOT_DIR”是在CMakeList.txt文件中定义的一个宏,如下图:

add_definitions(-DROOT_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/\")

 对于这种在编译过程中定义的宏,无法通过include某个*.c或*.h来解决,因此VScode中会报宏未定义的错误。

三、解决办法

在c_cpp_properties.json中添加宏定义,如下图,然后保存,报错就消失了。

{
    “configurations”:[
        {
            "defines":[
                "ROOT_DIR=***"
            ],
        }
    ]
}

注意:定义"ROOT_DIR"可能会引起其他错误,比如程序中使用该宏给string赋值,最好定义为"ROOT_DIR=*** " ,给它随便赋个值,瞒过vscode 不报错就行,反正编译的时候还是用CMakeList里的赋值。

参考博客: 

Add custom preprocessor definitions? · Issue #304 · microsoft/vscode-cpptools (github.com)

VSCODE 阅读C代码--一些 宏定义显示异常问题解决_宏定义无法识别_无限之生的博客-CSDN博客