如何在Guix项目中导入并扩展manifest.scm创建新清单?
解决Guix清单文件扩展问题
你之前的写法失败是因为(load "manifest.scm")返回的是manifest对象,而非包名称列表,append只能用于拼接列表,两者类型不匹配,所以无法正常工作。
以下是两种可行的解决方案:
方案1:提取原清单的包规格列表后扩展
修改manifest-alt.scm为以下内容:
(specifications->manifest (append (manifest-specifications (load "manifest.scm")) (list "make")))
manifest-specifications函数会从已有的manifest对象中提取出原始的包规格列表- 用
append把原列表和新的包名列表合并,再通过specifications->manifest生成新的manifest
方案2:直接向原manifest添加包对象
也可以用manifest-add-packages函数直接添加包,写法如下:
(manifest-add-packages (load "manifest.scm") (list (specification->package "make")))
specification->package将包名称字符串转换为Guix的package对象manifest-add-packages负责把新的package对象添加到原manifest中
验证
保存修改后的manifest-alt.scm,运行guix shell -m manifest-alt.scm进入环境后,即可同时使用gcc-toolchain和make的相关工具。
内容的提问来源于stack exchange,提问作者425nesp




