【发布时间】:2016-03-31 21:11:51
【问题描述】:
我第一次尝试使用 GNU Autotools 来打包我的名为 MyShell 的 C 程序。我已经尝试了两次,但两次都失败了。我关注了this simple tutorial,但是我的程序不同的地方以及导致问题的原因(我认为)是有1个.h文件和5个.c文件,而本教程只使用一个.c文件。
这是我的程序的文件结构:
MyShell/
- 自述文件
- src/
src/
- CommandExecutor.c
- CommandReader.c
- ForkLauncher.c
- Main.c
- MyShell.h
- MyShellLoop.c
任何关于如何编写 Makefile.am 文件、configure.ac 文件等的指导将不胜感激,或者任何关于使用 Autotools 进行更复杂程序的更详细的教程。
编辑
这些是我使用的文件:
MyShell/src/Makefile.am
bin_PROGRAMS = MyShell
MyShell_SOURCES = Main.c
MyShell/Makefile.am
SUBDIRS = src
dist_doc_DATA = README
MyShell/configure.ac
AC_INIT([MyShell], [1.0], [<my email address>])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
Makefile
src/Makefile
])
AC_OUTPUT
在我链接的教程中,configure.ac 文件有一行
AC_CONFIG_HEADERS([config.h])
我是否应该将config.h 替换为MyShell.h?
【问题讨论】:
-
'这很复杂。您是否正在调整您的程序以便在多种不同的系统类型上编译?如果是这样,您需要一个单独的
config.h文件,该文件将由客户端计算机上的configure脚本生成,AutoTools 将根据您指定的信息创建配置脚本(等)。如果你不需要配置你的程序,使用 AutoTools 可能是多余的。 -
@JonathanLeffler 将来我希望它可以在不同的系统上运行,但现在只需要在 Linux 中运行。这是一项任务,我们被要求使用 Autotools 来打包它,或者“编写您自己的 Makefile 并手动创建一个 tar.gz”。
-
在这两者之间,我每次都会使用手动编写的 makefile —— 这并不难(尽管干净地完成它并非完全微不足道)。但是,练习就是练习,提供学习体验。我有几个自动没收的程序,一个也使用
automake- 但我很久以前就做过自动没收(从修订历史来看是 2007 年)。我有足够的时间忘记细节(并从系统对我造成的创伤中恢复过来)。