为使用 conda 安装的仅标头库设置包含路径

Tom*_*eus 7 c++ include-path conda xtensor

最近有人建议我作为包管理器查看 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;
}
Run Code Online (Sandbox Code Playgroud)

我已经使用“安装”了该库

conda create --name example
source activate example
conda install -c conda-forge xtensor-python
Run Code Online (Sandbox Code Playgroud)

现在我想编译

clang++ -std=c++14 test.cpp
Run Code Online (Sandbox Code Playgroud)

请注意,我知道这是有效的:

clang++ -std=c++14 -I~/miniconda3/envs/example/include test.cpp
Run Code Online (Sandbox Code Playgroud)

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

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

Tom*_*eus 3

至少在 UNIX 系统上,解决方案是使用

clang++ -std=c++14 -I"${CONDA_PREFIX}"/include test.cpp
Run Code Online (Sandbox Code Playgroud)

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

~/miniconda3/envs/example
Run Code Online (Sandbox Code Playgroud)