VS Code 包括 C++ 的 Homebrew 安装包的路径问题

VS Code includePath issues with Homebrew installed packages for C++

提问人:Jake 提问时间:7/29/2023 更新时间:7/29/2023 访问量:283

问:

尝试学习 C++,所以我必须安装库,但是这些库被 VScode 找到。

我通过 Homebrew 安装了其中一些,因为这是最简单的入门方法,因为我以前曾将 Homebrew 用于 Python。

现在,当我尝试运行以下程序(来自 mlpack 的示例)时

#include<armadillo>
#include<mlpack>


using namespace mlpack;

int main()
{
  // Load the data from data.csv (hard-coded).  Use CLI for simple command-line
  // parameter handling.
  arma::mat data("0.339406815,0.843176636,0.472701471; \
                  0.212587646,0.351174901,0.81056695;  \
                  0.160147626,0.255047893,0.04072469;  \
                  0.564535197,0.943435462,0.597070812"); 
  data = data.t(); 

  // Use templates to specify that we want a NeighborSearch object which uses
  // the Manhattan distance.
  NeighborSearch<NearestNeighborSort, ManhattanDistance> nn(data);

  // Create the object we will store the nearest neighbors in.
  arma::Mat<size_t> neighbors;
  arma::mat distances; // We need to store the distance too.

  // Compute the neighbors.
  nn.Search(1, neighbors, distances);

  // Write each neighbor and distance using Log.
  for (size_t i = 0; i < neighbors.n_elem; ++i)
  {
    std::cout << "Nearest neighbor of point " << i << " is point "
        << neighbors[i] << " and the distance is " << distances[i] << "." << std::endl;
  }

  return 0;
}

这只是从 mlpack 示例中复制和粘贴,以查看我是否正确安装了所有内容。但是,如前所述,我收到致命错误,即找不到 mlpack 和 amrmadillo 包。我已经为包含行尝试了不同的变体

mlpack, mlpack.hpp, mlpack/core.hpp

但这些也不起作用。我是使用 C++ 和编译语言的新手,所以我怀疑我错过了一些关键信息。从我收集到的信息来看,如果您想提供帮助,以下将是重要信息。

VSCode: c_cpp_properties.json (我已经手动放入包含包的 Homebrew 目录)

{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "/opt/homebrew/lib/**",
                "/opt/homebrew/Cellar",
                "/opt/homebrew/Cellar/armadillo/12.6.1",
                "/opt/homebrew/Cellar/mlpack/4.2.0/include",
                "/opt/homebrew/include",
                "/opt/homebrew/Cellar/cereal/1.3.2/include",
                "/opt/homebrew/Cellar/ensmallen/2.19.1/include"
            ],
            "defines": [],
            "macFrameworkPath": [
                "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
            ],
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "macos-gcc-arm64",
            "compilerPath": "/opt/homebrew/bin/g++-13"
        }
    ],
    "version": 4
} 

VSCode:tasks.json(tbh我只明白这是做什么的,但我认为这是发现的,因为该命令与我的编译器路径匹配)

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        },
        {
            "type": "cppbuild",
            "label": "C/C++: g++-13 build active file",
            "command": "/opt/homebrew/bin/g++-13",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

摘自与 CPP 相关的设置:

    "window.zoomLevel": 1,
    "cmake.configureOnOpen": true,
    "C_Cpp.default.enableConfigurationSquiggles": false,
    "C_Cpp.default.compilerPath": "/opt/homebrew/bin/g++-13"
}

我还要注意,有两个编译器选项可供我选择使用

“/opt/homebrew/bin/g++-13” - 列为我当前的编译器路径 和 “/opt/homebrew/bin/gcc-13”

我选择哪一个并不重要。我是否使用“clang”、“clang++”、“gcc”或“g++”(未随自制软件一起安装)也没关系

我也没有设置configurationProvider。在另一种在线形式中,这似乎很重要 - 我的是默认的。不确定这对我的情况是否意味着什么。

据我所知,也许我错过了 Cmake 或 make 工具。但是,根据我的理解,自制软件应该解决这个问题和/或只有当我从源代码手动构建代码时才需要这样做。

如果您有资源,我应该注意了解此过程或此过程的任何部分,我也将不胜感激。

顺便说一句 - 我正在 Ventura 13.4.1 上使用 M1 Apple Silicon。尽管有些人可能从自制路径中的“选择”中推断出这一点,但显然这是苹果硅的东西?

我尝试了以下方法:

  1. 更改 include 语句中的文件名,用于不同的内容,如 mlpack.hpp、mlpack/core、mlpack/core.hpp 等,其中包含不同的变体
  2. 添加到 VScode 包含路径 - 在此之前,includePath 为空
  3. 更改编译器路径
  4. (1)、(2)、(3) 的各种变体 - 尽管选项的多样性很大,所以我没有尝试过每一种组合
  5. 重新启动计算机
  6. 完全退出 VSCode
  7. 许多 Google 搜索 - 这是进行许多 (1)、(2) 、(3) 更改的地方

多次阅读这些帖子中的许多内容,因为我必须获取词汇的上下文。还有更多与我的问题无关的问题。(1)https://github.com/microsoft/vscode-cpptools/issues/8377

(2)https://github.com/orgs/Homebrew/discussions/868

(3) 如何在 Visual Studio Code 中链接到使用 Homebrew 下载的库?

(4) VScode Mac“找不到/opt/homebrew” vscode 如何通过 HomeBrew 在我的 Mac 上安装 leveldb

(5) 以下链接似乎很有帮助,但我不太清楚响应者在说什么 https://www.reddit.com/r/cpp_questions/comments/102gbll/how_to_use_brew_installed_library_in_vs_code/

(6)这个是关于python的,但有些有用 https://www.reddit.com/r/learnprogramming/comments/11p1m35/troubleshooting_path_issues_with_python_on_visual/

C++ visual-studio-code 编译器错误 homebrew include-path

评论

0赞 sweenish 7/29/2023
尝试学习 C++ 并不意味着您必须安装库。正如所证明的,你并没有真正学习C++。除此之外,只需让包管理器或 cmake 为您完成即可。
0赞 Jake 7/29/2023
我应该更清楚。我制作了许多 C++ 文件,这些文件只是实现了链表、合并排序、哈希表和其他基本算法。我知道相当多的语法。但是,我想将 C++ 用于一些机器学习和科学计算目的,所以我想了解有利的库(因此 mlpack 和 aramdillo 包括)我真的对包管理器和/或 cmake 了解不够,无法解决这个问题。这就是我使用自制软件的原因,至少我很确定。但它可能是 C++、VScode 或自制问题。
0赞 sweenish 7/29/2023
tasks.json控制项目的生成方式。而且您不包括您的包含目录或库文件夹。就像我说的,值得学习柯南或 vcpkg(它们并不难)和 cmake。让工具收集您的资源并决定如何构建您的程序。你担心代码。

答: 暂无答案