gpt4 book ai didi

scheme - 使用自动工具制作可执行的 Guile 程序?

转载 作者:行者123 更新时间:2023-12-04 17:43:00 27 4
gpt4 key购买 nike

最近开始学习使用自动工具,并一直在尝试用它制作一个简单的 Guile 程序。 Following this tutorial我让程序成功编译,.go 文件放在 %site-ccache-dir 中,.scm 文件放在 %site-dir 中。但是,本教程的目的是制作模块而不是制作可执行文件。仅在 %site-dir 中创建指向 .scm 文件的链接并将其放置在 /usr/bin 中就足够了吗?使用自动工具执行此操作的最佳方法是什么?以下是我目前的设置...

guile.am:

moddir=$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)
godir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache

GOBJECTS = $(SOURCES:%.scm=%.go)

nobase_dist_mod_DATA = $(SOURCES) $(NOCOMP_SOURCES)
nobase_go_DATA = $(GOBJECTS)

# Make sure source files are installed first, so that the mtime of
# installed compiled files is greater than that of installed source
# files. See
# <http://lists.gnu.org/archive/html/guile-devel/2010-07/msg00125.html>
# for details.
guile_install_go_files = install-nobase_goDATA
$(guile_install_go_files): install-nobase_dist_modDATA

CLEANFILES = $(GOBJECTS)
GUILE_WARNINGS = -Wunbound-variable -Warity-mismatch -Wformat
SUFFIXES = .scm .go
.scm.go:
$(AM_V_GEN)$(top_builddir)/pre-inst-env $(GUILD) compile $(GUILE_WARNINGS) -o "$@" "$<"

自举:

#!/usr/bin/env sh

autoreconf --verbose --install --force

Makefile.am:

include guile.am

SOURCES = \
example-program.scm

EXTRA_DIST = \
bootstrap \
pre-inst-env.in

configure.ac:

AC_INIT([example-program], [0.1])
AC_CONFIG_SRCDIR([example-program.scm])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])

GUILE_PKG([2.2])
GUILE_PROGS
if test "x$GUILD" = "x"; then
AC_MSG_ERROR(['guild' binary not found; please check your guile-2.x installation.])
fi

AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env])

AC_OUTPUT

pre-inst-env.in:

#!/bin/sh

abs_top_srcdir="`cd "@abs_top_srcdir@" > /dev/null; pwd`"
abs_top_builddir="`cd "@abs_top_builddir@" > /dev/null; pwd`"

GUILE_LOAD_COMPILED_PATH="$abs_top_builddir${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"
GUILE_LOAD_PATH="$abs_top_builddir:$abs_top_srcdir${GUILE_LOAD_PATH:+:}:$GUILE_LOAD_PATH"
export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH

PATH="$abs_top_builddir:$PATH"
export PATH

exec "$@"

example-program.scm:

#!/usr/bin/guile \
-e main -s
!#

;;; Functions.
(define count-to-100
(lambda ()
(define my-num 1)
(while (<= my-num 100)
(display my-num)
(newline)
(set! my-num (+ my-num 1)))))

;;; Main.
(define (main args)
(count-to-100))

最佳答案

这是一个非常古老的问题,但仍然悬而未决,所以如果它对某人有益......

要为您的 Guile 项目利用 autotools 功能,您可以使用 Hall .它为您处理了很多事情,最终能够调用诸如 makemake checkmake distcheckmake clean 等...

你可以找到一个演示 here

希望有人会发现此信息有用...

干杯!

关于scheme - 使用自动工具制作可执行的 Guile 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53575839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com