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

Makefile Autoconf/Automake生成一个空的make文件,makefile,autoconf,Makefile,Autoconf,我正在尝试使用autoconf/automake工具链创建一个非常简单的构建脚本(主要是作为学习练习) 大多数示例似乎表明,在每个源目录中都需要一个单独的Makefile.am,并且项目根目录中的Makefile.am文件应该包含一个SUBDIRS指令,该指令告诉autoconf在何处查找其他Makefile 我认为对于一个非常简单的项目来说,在项目根目录中有一个Makefile.am是可能的。但是,当我尝试执行此操作并运行生成的configure脚本时,它会在项目根目录中创建一个空的Makef

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

大多数示例似乎表明,在每个源目录中都需要一个单独的
Makefile.am
,并且项目根目录中的
Makefile.am
文件应该包含一个
SUBDIRS
指令,该指令告诉autoconf在何处查找其他Makefile

我认为对于一个非常简单的项目来说,在项目根目录中有一个
Makefile.am
是可能的。但是,当我尝试执行此操作并运行生成的
configure
脚本时,它会在项目根目录中创建一个空的Makefile(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
当我运行配置脚本时,没有错误

然后我看到它在项目根目录中生成了一个
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应该如何工作的一些基本概念。我在这里做错了什么?

我也遇到了同样的问题——automake将在哪里生成空的makefile。我不知道为什么会发生这种情况,但我通过删除由autoconf生成的所有文件来修复它,例如Makefile.in(零字节Makefile.in绝对不好)


您也可以尝试自动恢复-如果这很有趣,我已经尝试重现您的案例,我得到了不同的结果,尽管是预期的结果

  • AM_INIT_AUTOMAKE
    调用是,您应该编写
    AM_INIT_AUTOMAKE([foreign])
    foreign
    告诉automake不要抱怨缺少
    README
    ChangeLog
  • 您的
    Makefile.am
    与源文件位于不同的文件夹中。虽然还可以,但新的汽车制造商应该抱怨这是一个向前的不兼容,我在输出(汽车制造商1.15)中得到了这一点:

    不过,这些只是警告

  • 无论如何,我没有只运行
    autoconf
    ,而是运行了
    autoeconf-I
    (或者可以肯定的是
    -I-f
    -f
    选项会覆盖工具生成的所有文件)。Autoreconf以正确的顺序为您运行
    autoconf
    automake
    和其他工具

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


您是否运行了
automake
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
...