VS 代码忽略来自 CMake 目标的特定目标包含路径顺序

问题描述 投票:0回答:1

我正在开发一个交叉编译的软件项目,其结构大致如下所示。将 Visual Studio Code 与 CMake 和“CMake Tools”扩展一起使用。在这种情况下,创建了两个可执行文件,它们有自己的一组源文件(如

main.c
),但它们有一些共享代码。对于此共享代码,使用了附加配置,包含在名为
libconfig.h
的文件中,这些文件包含在
libapi.h
中。

确保加载正确的配置标头的方法是具有正确的顺序或

-I...
参数,即显式
target_link_directories
对于 CMake 配置中的每个目标,以便它自己的包含文件夹首先出现

但是使用 VS Code 我遇到了一个问题。似乎基本上不考虑每个目标的包含目录列表,并且 IntelliSense 读取文件系统中任何位置找到的第一个同名文件,并仅将这些内容进行评估。例如,在编辑

comp2/src/main.c
时,忽略
comp2/include/libconfig.h
,而使用
comp1/include/libconfig.h
(当我尝试导航到那里时,也会打开它)。这严重破坏了语法突出显示。我尝试在 CMake 选项卡中选择显式构建目标,但这并不能解决任何问题。我已经清除了用户配置文件文件夹中的缓存数据文件夹,但这也没有效果。

我从其他 IDE 中了解到可以选择目标范围,这实际上会对评估产生影响。 VSCode 是否也可以实现同样的效果?

旁注:我注意到的另一件事是,由于不寻常的编译器,它报告某些标头中某些非标准关键字的解析错误。这可能会对问题产生影响吗?

.
├── CMakeLists.txt
├── Toolchain.cmake
├── comp1
│   ├── include
│   │   └── libconfig.h
│   └── src
│       └── main.c
├── comp2
│   ├── include
│   │   └── libconfig.h
│   └── src
│       └── main.c
└── libX
    ├── include
    │   └── libapi.h
    └── src
        └── libsrc.c
c visual-studio-code cmake
1个回答
0
投票

我发现的最可靠的解决方法是使用 CMAKE_EXPORT_COMPILE_COMMANDS 选项。有了这个(但仅当安装了 CppTools 扩展时),人们可以在 Command Pallete 中键入 IntelliSense,它提供了选择数据源的选项。然后就可以选择相关的

compile_commands.json
文件。设置完成后,通过 Ctrl-Click 进行的导航似乎可以在属于所选构建目标的源中正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.