Makefile Autoconf和init脚本

Makefile Autoconf和init脚本,makefile,autoconf,Makefile,Autoconf,我在理解autoconf工具链如何处理init脚本时遇到困难,这些脚本通常放在/etc/init.d/中,用于启动/停止守护进程或服务 autoconf工具链指定了一组预先命名的安装目录变量,如$bindir(可执行文件通常位于/usr/local/bin)或$includedir(对于头文件,可能是/usr/include),等等 但是/etc/init.d中的init文件呢?通过阅读,我没有看到任何与/etc/init.d/ 那么这里的惯例是什么呢?我是否只需要选择一个安装目录变量并用AC_

我在理解
autoconf
工具链如何处理init脚本时遇到困难,这些脚本通常放在
/etc/init.d/
中,用于启动/停止守护进程或服务

autoconf
工具链指定了一组预先命名的安装目录变量,如
$bindir
(可执行文件通常位于
/usr/local/bin
)或
$includedir
(对于头文件,可能是
/usr/include
),等等

但是
/etc/init.d
中的init文件呢?通过阅读,我没有看到任何与
/etc/init.d/

那么这里的惯例是什么呢?我是否只需要选择一个安装目录变量并用
AC_SUBST
覆盖它,这样我就可以将脚本安装到
/etc/init.d

根据(还有点过时),Autotools可能不太适合这样做。尽管如此,还是提供了这些说明(稍作修改后复制):


最简单的答案;在顶级源目录Makefile.am中:

# Install my_script in $(bindir) and distribute it.
dist_bin_SCRIPTS = my_script
因此,
$(bindir)
是脚本的默认值

--

对于实际涵盖守护进程/服务初始化脚本的更健壮的实现(首先引用权威来源):

不需要额外的\u DIST或任何构建规则:Automake从AC\u CONFIG\u文件推断它们(请参见需求)。CLEANFILES仍然很有用,因为默认情况下,Automake将在distclean而不是clean中清理AC_CONFIG_文件的目标

链接到源():

示例

安装到自定义位置:

将是
$(bindir)

编辑

以上两个示例都假设您使用自动工具生成
init\u d\u脚本
文件,但是如果我们想分发一个已经创建的脚本,并将其安装到我们的
$(init\u ddir)
位置,该怎么办

init_ddir = $(sysconfdir)/init.d
dist_init_d_SCRIPTS = <yourscript>
删除该规则后(在添加init.d脚本和conf文件之前,不必删除该规则),所有生成和编译的内容都绝对完美……事实上,包括使用
/usr
前缀将垃圾箱放入其目的地,这是覆盖的最初预期效果

dh_installinit
调用的覆盖告诉Debild不要像makefile那样安装init脚本,并指定只进行update rc.d调用以向系统注册脚本。我选择将脚本命名为与包不同的名称;所以我需要传递--name=选项


希望这能帮助到别人,我知道如果这个答案继续存在的话,它将在未来对我有所帮助

这是一个好问题,我希望你不介意你没有要求的额外信息。因为有一个时间间隔,没有被接受的答案,我已经发布了一个非常详细的答案,这也是为了提醒我自己。当我自己搜索这些细节时,你的问题是第一个出现在谷歌上供我解释的问题之一。
# Yes, even though its `init_d_SCRIPTS`, we use `init_ddir`,
# with-out a second underscore.
init_ddir = $(sysconfdir)/rc.d/init.d
init_d_SCRIPTS = <yourscript>
# CLEANFILES = $(init_d_SCRIPTS)
bin_SCRIPTS = <yourscript>
# CLEANFILES = $(bin_SCRIPTS)
init_ddir = $(sysconfdir)/init.d
dist_init_d_SCRIPTS = <yourscript>
#!/usr/bin/make -f
%:
    dh $@

# If installing an upstream init.d script:
override_dh_installinit:
    dh_installinit --name=<scriptname> --onlyscripts

# Remove the following:
# override_dh_auto_install:
#    $(MAKE) DESTDIR=$$(pwd)/debian/<package> prefix=/usr install