从本地C++程序构建 conda 包



我正在尝试构建(稍后上传(一个conda包,其中包含我在C++年开发的自定义程序。
简化问题,我有以下meta.yaml

package:
name: CoolName
version: "1.0.0"
source:
path: ./source
requirements:
build:
- make

以及以下build.sh

make

我这里有两个问题:
1(我应该如何以及在哪里复制作为make编译结果的二进制文件,以便在环境激活时确实识别它?
2( 我应该如何指定 g++ 作为依赖项?我希望以后可以使用此软件包linux-64osx-64...在构建过程中(在 Makefile 中(,我只使用 g++。


编辑

我已经修改了我的构建脚本,使其具有:

make
mkdir -p $PREFIX/bin
cp my_binary $PREFIX/bin/my_binary

现在conda-build成功了。但是,当我稍后尝试使用conda install --use-local在本地安装软件包时,我得到:

Collecting package metadata (current_repodata.json): done
Solving environment: done
# All requested packages already installed.

但事实并非如此,我的二进制文件没有安装在任何地方,也无法识别......

  1. 我应该如何以及在哪里复制作为 make 编译结果的二进制文件,以便在环境激活时确实识别它?

正如您在编辑中提到的,请安装在${PREFIX}中的某个位置

  1. 我应该如何将 g++ 指定为依赖项?

要使用 conda 提供的编译器(而不是系统编译器(,请使用以下命令:

requirements:
build:
- {{ compiler('cxx') }}

我希望以后可以将此软件包用于 linux-64 和 osx-64...在构建过程中(在 Makefile 中(,我只使用 g++。

注意:在Mac上,它将使用clang++,而不是g++。 确保您的生成文件遵循${CXX}环境变量,而不是硬编码g++

但是,当我稍后尝试使用conda install --use-local在本地安装软件包时,我得到:

这很奇怪。conda install --use-local CoolName应该做你想做的事。 但这里有一些方法可以尝试:

  • 仔细检查您尝试将其安装到的环境的内容:

    conda list
    
  • 尝试安装到新的环境:

    conda create -n my-new-env --use-local CoolName
    
  • 删除在成功生成包之前可能已创建的包的任何过时版本:

# Inspect the packages you've created,
# and consider deleting all but the most recent one.
ls $(conda info --base)/conda-bld/linux-64/CoolName*.tar.bz2

。然后尝试再次运行conda install

相关内容

  • 没有找到相关文章

最新更新