【问题标题】:Does CMake handle include path stuff as well?CMake 句柄是否也包含路径内容?
【发布时间】:2018-12-12 09:11:09
【问题描述】:

为了在 CMake 中将 VulkanSDK 添加到我的项目中,我使用了 find_package()target_link_libraries(),然后通过添加到包含路径来编辑我的 VSCode 项目配置。

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "D:/Programs/VulkanSDK/1.1.85.0/Include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.17763.0",
            "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "msvc-x64"
        }
    ],
    "version": 4
}

我是否应该使用 cmake 来包含这些标头而不使用 VSCode 项目配置?

【问题讨论】:

标签: c++ cmake header linker


【解决方案1】:

您可以在您发布的配置中set the compileCommands variabletell CMake to generate the compile commands

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS:Bool=true ...

这样,CMake 会创建一个包含用于编译代码的所有命令行的 JSON 数据库,并且 VSCode 可以使用相同的命令来提供智能感知。

请注意,此方法仅适用于 CMake 页面上列出的 Makefile 生成器和 Ninja 生成器。

【讨论】:

  • 您发布的方法是推荐的方法吗?就像它比我的设置更好?我的抱怨是我可能做错了。
  • 对于 CMake,target_link_libraries 应该足以让 构建 处理包含,无需 target_include_directories。 CMake 不需要或使用 VSCode 项目配置。仅 VSCode 使用它来提供智能感知。我的方法在工作时会更好,因为智能感知是使用与用于编译的完全相同的命令提供的。当它不起作用时,您可以尝试使用 "defines" : [...], "includePath": [...] 手动重现它们以使智能感知正常工作(告诉您每个变量的正确类型等)。
  • 所以主要问题是,构建是否有效?如果是,请不要修改 CMake 配置。智能感知是否正常工作?然后要么修复 VSCode 配置,要么修改两者以使用编译命令数据库。
猜你喜欢
  • 1970-01-01
  • 2013-07-08
  • 2018-04-22
  • 2019-03-18
  • 2010-12-06
  • 2016-07-04
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
相关资源
最近更新 更多