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