Makefile Autoconf/Automake生成一个空的make文件
我正在尝试使用autoconf/automake工具链创建一个非常简单的构建脚本(主要是作为学习练习) 大多数示例似乎表明,在每个源目录中都需要一个单独的Makefile Autoconf/Automake生成一个空的make文件,makefile,autoconf,Makefile,Autoconf,我正在尝试使用autoconf/automake工具链创建一个非常简单的构建脚本(主要是作为学习练习) 大多数示例似乎表明,在每个源目录中都需要一个单独的Makefile.am,并且项目根目录中的Makefile.am文件应该包含一个SUBDIRS指令,该指令告诉autoconf在何处查找其他Makefile 我认为对于一个非常简单的项目来说,在项目根目录中有一个Makefile.am是可能的。但是,当我尝试执行此操作并运行生成的configure脚本时,它会在项目根目录中创建一个空的Makef
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])
告诉automake不要抱怨缺少foreign
、README
等ChangeLog
- 您的
与源文件位于不同的文件夹中。虽然还可以,但新的汽车制造商应该抱怨这是一个向前的不兼容,我在输出(汽车制造商1.15)中得到了这一点: 不过,这些只是警告Makefile.am
- 无论如何,我没有只运行
,而是运行了autoconf
(或者可以肯定的是autoeconf-I
,-I-f
选项会覆盖工具生成的所有文件)。Autoreconf以正确的顺序为您运行-f
、autoconf
和其他工具automake
- 在
完成后,我得到了一个按预期工作的配置脚本,在运行它之后,我也得到了一个正确的Makefileautoreconf
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
...