【问题标题】:Trouble with learning how to use GNU Autotools to package my program学习如何使用 GNU Autotools 打包我的程序时遇到问题
【发布时间】: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 年)。我有足够的时间忘记细节(并从系统对我造成的创伤中恢复过来)。

标签: c linux gnu autotools


【解决方案1】:
MyShell_SOURCES = Main.c

这似乎是错误的。您需要列出所有源文件,including header files

我是否应该将config.h 替换为MyShell.h

没有。 config.h 应该由configure 脚​​本从config.h.in 文件生成。 “如何”可以很漂亮complex

【讨论】:

  • 好吧,只是一个逗号分隔的列表?另外,我需要将此作为大学作业提交,其中程序名称必须采用 xxxx_xxxx 格式。我可以在 Makefiles 和配置文件中用 'xxxx_xxxx' 替换任何 'MyShell' 吗?或者这会导致xxxx_xxxx_Sources = MyShell.h, Main.c ... 出现问题吗?
  • AFAIK 这应该没问题。
  • 等一下,不是 逗号分隔 ... 空格分隔 .. 就像我发布的链接一样。
  • 谢谢,我现在再试一次
猜你喜欢
  • 2022-10-16
  • 2015-10-17
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 2011-03-13
  • 2023-01-13
相关资源
最近更新 更多