最简单的;配置";将前缀参数传递给Makefile的脚本?(配置hello world)

最简单的;配置";将前缀参数传递给Makefile的脚本?(配置hello world),makefile,configure,autoconf,automake,Makefile,Configure,Autoconf,Automake,我的最终目标是生成一个简单的.deb包 为此,我已经读过,最好在我的项目构建基础设施中提供3个构建阶段,而不是在debian/文件夹中 所以我首先需要的是一个配置脚本,但是我想要一个最简单的配置脚本,它只接收“-prefix”参数并将其值传递给Makefile系统(这样Makefile的“install”目标就可以将文件复制到它) 我可以不使用autoconf进行此操作吗?我知道autoconf很好,但对于最简单的配置阶段,我可能还不太需要它 谢谢没有autoconf我是不会做的。你基本上是说你

我的最终目标是生成一个简单的.deb包

为此,我已经读过,最好在我的项目构建基础设施中提供3个构建阶段,而不是在debian/文件夹中

所以我首先需要的是一个配置脚本,但是我想要一个最简单的配置脚本,它只接收“-prefix”参数并将其值传递给Makefile系统(这样Makefile的“install”目标就可以将文件复制到它)

我可以不使用autoconf进行此操作吗?我知道autoconf很好,但对于最简单的配置阶段,我可能还不太需要它


谢谢

没有autoconf我是不会做的。你基本上是说你想模仿autoconf的一个特定行为,而不知道autoconf添加的所有分支和相关行为。这违反了最小意外原则,因为用户(甚至您的deb工具)会期望相关行为(
DESTDIR
--exec prefix
,等等)。只需使用autoconf。您可以使
配置.ac非常简单:

AC_INIT([My App], [1.0], [my-email@me.com])
AM_INIT_AUTOMAKE([-Wall foreign])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
我最后用了这个:

#!/usr/bin/env bash
prefix=NONE
test "$prefix" = NONE && prefix=/usr/local

usage ()
{
    echo ""
    echo "Usage : configure [--prefix=PREFIX]"
    echo ""
}

while test x$1 != x; do
    case $1 in
        --prefix=*)
            prefix=`echo $1 | sed 's/--prefix=//'`
            ;;
        --prefix)
            shift
            prefix=$1
            ;;
        --help)
            usage
            exit
            ;;
        *)
            echo Warning: unknown argument $1 >&2
            usage
            ;;
    esac
    shift
done

echo -n "SUBDIRS = " > config.make

echo Configuration Summary
echo ---------------------
echo
echo "MyApp has been configured with "
echo "    prefix = $prefix"
echo
echo >> config.make
echo

echo -n  "prefix=$prefix" >> config.make
然后在Makefile中,我需要做的第一件事是:

top_srcdir=.
CONFIG_MAKE=$(top_srcdir)/config.make

-include $(top_srcdir)/config.make

如果有比这更好的解决方案,我会很感兴趣。

我同意,但你没有明白我的意思:我真的想感受不使用autoconf自动说服我需要autoconf的痛苦。这样我可以更好地理解它提供的抽象。好的。。。也许可以使用我提供的代码片段生成一个
configure
脚本,然后读取它的全部14 KB?;-)拿一个现有的简单包,看看autoconf提供了什么。现有的简单包不是最简单的包;)autotools用户期望的其他make目标,如:“make uninstall”、“make dist”、“make distcheck”、“make DESTDIR=/path install”?“autotools用户”又如何呢?我只关心.deb生成需要什么(目前),因为deb创建工具假定默认生成?
testx$1!=如果
$1
包含任何空格,x
将失败。
测试x“$1”!=x
,或
测试“${1+set}”=set