【问题标题】:How to automake C source files如何自动制作 C 源文件
【发布时间】:2013-12-07 01:25:05
【问题描述】:

我有一个文件 cmdscan.c,它只包含一个函数和一个结构。我的主程序 hsh.c 使用来自 cmdscan.c 的函数和结构。我完全按照教授 pdf 上的说明进行操作,但它不起作用。即使我编辑了一些东西,保存并运行它也会说没有什么可做的。当我使用 make distcheck 时,我得到一个错误,说它找不到 hsh.c。

这是我的目录包含的内容:

Makefile.am:

    bin_PROGRAMS = hsh
    hsh_SOURCES = hsh.c cmdscan.c

configure.in:

    AC_INIT(hsh.c)
    AM_INIT_AUTOMAKE(hsh,1.0)
    AC_PROG_CC
    AC_PROG_INSTALL
    AC_OUTPUT(Makefile)

我确保使用标签。 然后我运行命令:

aclocal
autoconf
touch README AUTHORS NEWS ChangeLog
automake -a
configure
make

注意:当我运行“配置”时,它说找不到命令。但我可以运行 ./configure,这就是我所做的。

当我执行最后一个命令“make”时,我得到:

make: Nothing to be done for `all'.

即使我编辑并保存它。所以当我跑步时

make distcheck

我明白了:

configure: error: cannot find sources (hsh.c) in ..
make: *** [distcheck] Error 1

如果我跑:

gcc cmdscan.c hsh.c -o hsh

它有效。

【问题讨论】:

  • 您正在阅读哪些文档推荐使用名称 configure.in?它非常旧了。
  • 我只是按照他在 pdf 中给出的作业说明进行操作。我给他发了电子邮件,但他没有回复。
  • 将包名和版本放在AM_INIT_AUTOMAKE而不是AC_INIT更加过时了!
  • 说真的,您的讲师文档已经过时了大约 10 年。
  • @WilliamPursell,IIRC 它更像是过时了 12 年以上。

标签: c makefile autoconf automake linkage


【解决方案1】:

您有一些错误,例如:

AC_INIT(hsh.c), AM_INIT_AUTOMAKE(hsh,1.0) instead use for example:
AC_INIT([hsh],[1.0])
AM_INIT_AUTOMAKE([1.14])

其中“1.14”是我的automake版本,你可以看到:automake --version

如果您需要快速教程,请参阅:http://embelinux.blogspot.de/2013/09/autotools1-hola-mundo-la-autotools.html 如果您需要强大的文档,请运行:apt-get install autoconf(参见 /usr/share/doc/autoconf-doc) 并下载http://www.gnu.org/software/automake/manual/automake.pdf

AC_INIT (package, version, [bug-report], [tarname], [url])

处理任何命令行参数并执行初始化和验证。 设置包的名称及其版本。这些通常用于“--version” 支持,包括配置。可选参数错误报告应该是 用户应向其发送错误报告的电子邮件。包 tarname 不同于 包:后者指定完整的包名称(例如,“GNU Autoconf”),而 前者用于分发 tar 球名称(例如,“autoconf”)。它默认为 带有“GNU”剥离、小写字母和除字母数字以外的所有字符的软件包 并且下划线更改为“-”。如果提供,url 应该是主页 包裹。 AC_INIT 的参数必须是静态的,即不应该有任何 shell 计算 换行符、引号或换行符,但它们可以由 M4 计算。这是因为 包信息字符串在 M4 时间扩展为多个上下文,并且必须 在 shell 时间给出相同的文本,无论是在单引号字符串中,还是在双引号中 字符串、引用的此处文档或未引用的此处文档。允许使用 m4_esyscmd 或 m4_esyscmd_s 用于计算随时间变化的版本字符串 提交到版本控制系统(事实上,Autoconf 就是这样做的,对于所有版本的 版本之间的开发树)。

AM_INIT_AUTOMAKE([OPTIONS])

运行正确操作生成的 Makefile 所需的许多宏。 今天,使用一个参数调用 AM_INIT_AUTOMAKE:空格分隔 应该应用于每个 Makefile.am 的 Automake 选项列表 树。效果就像每个选项都列在 AUTOMAKE_OPTIONS 中(参见 第 17 章 [选项],第 117 页)。 这个宏也可以用另一种不推荐的形式调用:AM_INIT_ AUTOMAKE(包,版本,[无定义])。在这种形式中,有两个 必需参数:包和版本号。这种用法是 大部分已过时,因为可以从以下位置获取包和版本 Autoconf 的 AC_INIT 宏。然而,与发生的事情不同 AC_INIT 调用,这个 AM_INIT_AUTOMAKE 调用支持 shell 变量在 PACKAGE 和 VERSION 参数中的扩展,这可以是 在某些选定的情况下仍然有用。我们的希望是未来的 Autoconf 版本将改进对动态定义的包版本的支持 在配置运行时;当(如果)发生这种情况时,支持两个参数 AM_INIT_AUTOMAKE 调用可能会从 Automake 中删除。

【讨论】:

    【解决方案2】:

    问题最终是我不得不将 configure.in 更改为 configure.ac。然后我不得不在我的打开文件语句中添加另一个参数0666。之后一切似乎都很好,它编译并允许我创建一个包。 pdf没有提供这样的信息-_-。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 2011-01-20
      • 2019-12-14
      • 1970-01-01
      相关资源
      最近更新 更多