我正在尝试构建(稍后上传(一个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-64
和osx-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.
但事实并非如此,我的二进制文件没有安装在任何地方,也无法识别......
- 我应该如何以及在哪里复制作为 make 编译结果的二进制文件,以便在环境激活时确实识别它?
正如您在编辑中提到的,请安装在${PREFIX}
中的某个位置
- 我应该如何将 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
。