我有一个 Common Lisp 项目,它依赖于托管在 GitHub 上的 C/C++ 库。我需要克隆、配置和创建此依赖项才能使我的项目正常工作,我更愿意在 Common Lisp 中执行此操作,而不是提供 shell 脚本。
为 Common Lisp 项目自动执行此操作的最佳方法是什么?我尝试使用 INFERIOR-SHELL 复制我的 shell 命令,但它在git clone
.
我有一个 Common Lisp 项目,它依赖于托管在 GitHub 上的 C/C++ 库。我需要克隆、配置和创建此依赖项才能使我的项目正常工作,我更愿意在 Common Lisp 中执行此操作,而不是提供 shell 脚本。
为 Common Lisp 项目自动执行此操作的最佳方法是什么?我尝试使用 INFERIOR-SHELL 复制我的 shell 命令,但它在git clone
.
一些可能性:
如果您的项目本身就是一个 Git 存储库(GitHub 或其他),请将 C 库设置为子模块。
git submodule add --name clib git@github.com:someone/clib ./src/clib
或者,也许使用drakma
或您喜欢的 HTTP 客户端(甚至,也许,使用curl
或wget
)从 GitHub 拉取源代码的 tarball,而不是克隆。(假设您只对构建包感兴趣,而不是编辑包。)
从Makefile
. inferior-shell
可能是可行的;我通常使用uiop:run-program
ASDF 提供它,只需调用make
.
```
all: src/clib/lib/libclib.so
src/clib/lib/libclib.so: src/clib/Makefile
$(MAKE) -C src/clib all
src/clib/Makefile: src/clib/configure
cd src/clib; ./configure
src/clib/configure: src/clib/configure.in
cd src/clib; autoconf
src/clib/configure.in:
git clone https://github.com/someone/clib ./src/clib
```
你没有提到你从中得到了什么错误git clone
,但我猜它期待用户输入(例如,也许是为了解锁你的 SSH 钥匙串)。假设它是一个公开可见的项目,您最好使用https:
URI 而不是 SSH ( git@github.com:
) 版本。
在普通的 lisp 上没有这样的东西可以很好地工作。从这篇文章中,common lisp 生态系统的实际状态,在构建系统部分:
未来的工作:
更多 ASDF 组件,例如用于构建 C/C++ 文件。用于下载 Lisp 库所需的外部 C 库的独立于平台的包管理器将非常有用。
您应该从项目内部的依赖项中查看。