Autoconf / Automake生成一个空的make文件

时间:2014-11-08 21:22:40

标签: makefile autoconf

我正在尝试使用autoconf / automake工具链创建一个非常简单的构建脚本(主要是作为学习练习。)

大多数示例似乎表明您在每个源目录中都需要单独的Makefile.am,并且项目根目录中的Makefile.am文件应该包含一个SUBDIRS指令,该指令告诉autoconf到哪里寻找额外的Makefile。

我认为,对于一个非常简单的项目,可能在项目根目录中有一个Makefile.am。但是,当我尝试执行此操作并运行生成的configure脚本时 - 它会在项目根目录中创建一个空的(0字节)。

我不确定我在这里做错了什么。

所以,我的目录结构非常简单:

MyProject
---src
------myproject.cpp
---Makefile.am
---configure.ac

configure.ac文件很小:

AC_INIT(myproject, 1.0)
AC_MSG_NOTICE([My Project])
AC_PROG_CXX
AC_LANG(C++)
AC_CHECK_HEADERS(iostream)
AC_CONFIG_SRCDIR(src/myproject.cpp)
AM_INIT_AUTOMAKE(MyProject, 1.0)
AC_OUTPUT(Makefile)

Makefile.am也非常简单:

bin_PROGRAMS = myproject
myproject_SOURCES = src/myproject.cpp
myproject_CPPFLAGS = --std=c++11

我跑:

autoconf configure.ac > configure

当我运行configure脚本时,没有错误。

然后我看到它在项目根目录中生成了Makefile

 # ls -lh | grep Make
-rw-r--r-- 1 root root    0 Nov  8 16:13 Makefile
-rw-r--r-- 1 root root   98 Nov  8 15:53 Makefile.am
-rw-r--r-- 1 root root    0 Nov  8 15:00 Makefile.in

你可以看到,它生成的Makefile完全是空的。

所以我显然误解了autoconf / automake应该如何运作的基本原理。我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题 - automake会生成空的Makefile。我不知道它为什么会发生,但是我通过删除autoconf生成的所有文件来修复它,例如Makefile.in(零字节Makefile.in绝对不好)。

您还可以尝试autoreconf -if

答案 1 :(得分:0)

有趣的是,我试图重现你的情况,但我得到了不同的结果,尽管有预期的结果。

  • AM_INIT_AUTOMAKE调用是obsolete,您应该写AM_INIT_AUTOMAKE([foreign])foreign告诉automake不要抱怨丢失READMEChangeLog等。
  • 您的Makefile.am与源文件位于不同的文件夹中。虽然没关系,但新的automake应该抱怨它是前向不兼容的,我在输出上得到了这个(automake 1.15):

    Makefile.am:2: warning: source file 'src/myproject.cpp' is in a subdirectory,
    Makefile.am:2: but option 'subdir-objects' is disabled
    automake: warning: possible forward-incompatibility.
    automake: At least a source file is in a subdirectory, but the 'subdir-objects'
    automake: automake option hasn't been enabled.  For now, the corresponding output
    ...
    

    这些只是警告。

  • 无论如何,我没有只运行autoconf,而是运行autoreconf -i(或-i -f以确保 - -f选项会覆盖所有文件工具生成)。 Autoreconf会以正确的顺序为您运行autoconfautomake和其他工具。

  • autoreconf完成后,我得到了一个按预期工作的配置脚本,运行后,我也得到了正确的Makefile。