我正在做一个基于CMake的项目,它包含C和CUDA源文件,并且有一些头文件意味着这两种语言都包含在内。
对于这些头文件,我希望看到高亮显示和语法检查的结果尽可能接近NVCC(CUDA编译器)所看到的结果,例如,我希望定义预处理器符号__CUDACC__
。
对我来说,CMake没有定义这样的符号是很重要的,因为它实际上是NVCC工具链的内部符号,我需要它来进行语法检查。
我试过“Tools->C->Additional preprocessor directives”,似乎没有效果。我也尝试了一个名为CMakeLists.txt.config
的文件,似乎也没有效果。
我想听听你的建议。重申一下,我正在寻找一种方法来设置一个只对语法检查系统可见的define(CPP符号/宏)。
1条答案
按热度按时间htrmnn0y1#
我刚刚发现了this post,它揭示了我最初问题的正确答案。原来在语法检查期间,Qt Creator定义了
Q_CREATOR_RUN
宏。因此,需要检查其定义:
在上面的示例中,我还检查是否定义了
__INTELLISENSE__
,以便在Visual Studio和VS Code中也可以使用相同的逻辑。[kept出于考古学原因-更好的答案在上面]
经过进一步的挖掘,我发现了一个特定于Clang分析器的属性,该属性是在语法检查的分析过程中定义的,而不是在编译过程中定义的。
请注意,这纯粹是因为我的项目使用GCC编译,而QT Creator的语法检查通过Clang运行。
这允许笨拙的黑客如下,这可能是有用的,也可能不是有用的,这取决于一个人的需要。基本上这个想法是,即使你用GCC编译,你也会让Clang观察你的代码,这对NVCC使用的文件来说也是类似的。
clang++
也定义了相同的功能。要解决这个问题,需要在分析器中定义某种宏,但Clang中没有,到目前为止,我还没有找到这样的宏。起初我希望
__clang_analyzer__
能满足这个需求,但是根据我的Qt Creator版本(6.0.2),语法检查时没有定义宏,所以我们又回到了原点。