【问题标题】:configure vscode to include CMakeLists.txt file of multiple sub-project配置vscode包含多个子项目的CMakeLists.txt文件
【发布时间】:2022-12-25 11:21:11
【问题描述】:

我想正确配置项目的settings.json 文件以使用多个子项目的CMakeLists.txt 文件。

我的方法如下

该项目的结构如下所示。

vscode_build_cmake/
`-- task
    |-- add
    |   |-- CMakeLists.txt
    |   |-- include
    |   |   `-- foo.h
    |   `-- src
    |       |-- foo.cpp
    |       `-- main.cpp
    `-- print
        |-- CMakeLists.txt
        |-- include
        |   `-- foo.h
        `-- src
            |-- foo.cpp
            `-- main.cpp

这里,add和print是主项目task的完全独立的子项目。每个子项目都有自己的构建方法,这些方法写在它们自己的CMakeLists.txt 文件中。构建子项目的通常步骤是:

cd task/add
mkdir build
cd build
cmake .. && make

task/print 的步骤相同。

现在我想使用 VSCode Cmake 工具执行这个build task。我发现我只需要制作一个 vscode_build_cmake/.vscode/settings.json 文件,我可以在其中指向 CMakeLists.txt 文件的目录。我现在正在与

{
    "cmake.configureOnOpen": false,
    "cmake.sourceDirectory": "${workspaceFolder}/task/add"
}

我只需按ctrl+shift+p,然后在命令框中输入run build task,然后按Enter。那个为我完成了工作,我可以在 task/add 目录中看到 build, bin, lib 目录。

但是我现在面临的问题是,如果我需要构建 print 子项目,我必须手动编辑 settings.json 文件,如下所示

{
    "cmake.configureOnOpen": false,
    "cmake.sourceDirectory": "${workspaceFolder}/task/print"
}

之后,我必须 delete cache and reconfigure 和 build task 现在只为 print 项目执行构建任务。这对我来说非常乏味。

我的愿望是知道

  • 有什么方法可以指出cmake.sourceDirectory中add和print的CMakeLists.txt文件吗?哪个可以告诉我我想执行哪个构建任务?例如:
{
    "cmake.configureOnOpen": false,
    "cmake.sourceDirectory": ["${workspaceFolder}/task/add",
                              "${workspaceFolder}/task/print"]
}

要么 ,

  • 有什么方法可以执行两个子项目的构建任务。(这个是可选的。前一个对我的情况很重要)。

我正在使用 CMake 工具 v1.13.4。

【问题讨论】:

  • 如果任务是主项目,它应该有一个顶级 CMakeLists,每个子项目都有 add_subdirectory。 AFAIK CMake 工具无法处理同一 VSCode 实例中的多个顶级 CMakeList。
  • @SpacePotatoes task 是所有独立子项目所在的目录(我也称为项目)。使用目前的结构,无法将顶级 CMakeList 放在那里。

标签: c++ linux visual-studio-code cmake


【解决方案1】:

如果您不想使用 tasks/CMakeLists.txt、add_subdirectory、add/ 和 print/,那么您可以考虑使用 VS Code 的多根工作区功能,vscode-cmake-tools 扩展支持该功能。

如果你有理由不使用 / 你不喜欢多根工作区方法,你可以表示支持vscode-cmake-tools issue #1374(“无需多根工作区即可支持多个 CMakeLists.txt") 和the proposed solutions。在撰写本文时,提案流程仍处于早期阶段。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多