6

最近有人建议我查看 conda 作为包管理器。不幸的是,我没有成功找到如何让我的编译器找到一个安装了 conda 的仅标头库?理想情况下,我希望根本不必手动指定编译器的路径。

(上下文是我来自 macOS 上的自制程序,它在正确的位置创建符号链接。显然这是 conda 避免的。但是,编译简单示例的简单方法会很好!)


例子

例如,如果我的代码是下面的代码。注意:这个问题是通用的,与特定的包无关,我也不想再次手动指定我的特定虚拟环境。

#include <iostream>
#include <xtensor/xarray.hpp>
#include <xtensor/xio.hpp>

int main()
{
  xt::xarray<double> a
    {{1.0, 2.0, 3.0},
     {2.0, 5.0, 7.0},
     {2.0, 5.0, 7.0}};

  std::cout << a;
}

我已经使用“安装”了库

conda create --name example
source activate example
conda install -c conda-forge xtensor-python

现在我想编译

clang++ -std=c++14 test.cpp

请注意,我知道这有效:

clang++ -std=c++14 -I~/miniconda3/envs/example/include test.cpp

但我不认为这是想要的,因为:

  • 路径包括环境 ( example)。
  • 它取决于系统。
4

2 回答 2

2

至少在 unix 系统上,一个解决方案是使用

clang++ -std=c++14 -I"${CONDA_PREFIX}"/include test.cpp

从而"${CONDA_PREFIX}"指向当前 conda 环境的根。在这种情况下:

~/miniconda3/envs/example
于 2019-11-29T14:31:29.923 回答
1

我宁愿导出CPATH 或 CPLUS_INCLUDE_PATH变量来添加 ${CONDA_PREFIX}/include :它会从 conda 环境中解开编译过程(编译 test.cpp),从而允许编译过程的可移植性。

CPATH 如果存在此环境变量,则将其视为要添加到默认系统包含路径列表的分隔路径列表。分隔符是与平台相关的分隔符,在 PATH 环境变量中使用。

C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH 这些环境变量指定了额外的路径,对于 CPATH,它们只在处理适当的语言时使用。

使用https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html?highlight=env#setting-environment-variables设置环境变量。

$ conda env config vars set CPATH=${CONDA_PREFIX}/include:${CPATH}
于 2021-08-27T09:00:37.003 回答