1.先运行起来
准备main.c; makefile.am
makefile.am内容如下:
bin_PROGRAMS=helloworld
helloworld_SOURCES=main.c
执行autoscan, 将configure.scan重命名为configure.ac.并修改内容:
AC_INIT([helloworld], [1.0])
AM_INIT_AUTOMAKE
AC_CONFIG_FILES([makefile])
执行aclocal,autoconf
执行autoheader
新建NEWS; README; AUTHORS; ChangeLog
执行automake
执行./configure
执行make
2.顺序
source code --autoscan-->configure.scan--vim-->configure.ac
configure.ac--autoheader-->config.h.in
configure.ac--aclocal-->aclocal.m4--autoconf-->configure
user--vim-->makefile.am
makefile.am; config.h.in; aclocal.m4--automake-->makefile.in
//note:
http://jianlee.ylinux.org/Computer/C和GNU开发/makefile-am.html
中提及到的include_HEADERS标签,意义:“
The include_HEADERS line is similar: it indicates that the listed files are to be distributed, and are to be installed in the correct place for include files.”
//note:
疑问:网上的资料中为什么每个文件夹都会有个makefile.am文件?
有的提到:“Makefile.am文件:这个文件告诉编译器,如何编译当前目录下的源文件。”
“Makefile.am是怎么放的:
1.根目录(configure.ac所在的目录)必须有一个Makefile.am
2.所有有需要编译的代码文件的目录下必须有一个Makefile.am
3.如果一个目录中有Makefile.am,那么必须在它的父目录中的Makefile.am里用SUBDIRS指定它
”
我实验的结果好像并不是如此。。xxx_SOURCES可以其他路径中的cpp或c,又何来的必须二字。估计都可以和configure不是放同一个文件夹内,只要在编辑configure.ac的时候指定Makefile的时候设置好就行。懒省事就可以SUBDIRS里面索引到子目录中的Makefile。。。估计一个Makefile也可以同时bin_PROGRAMS和lib_LIBRARIES..那一个更是可以完成所有的工作,但是为了明了些,最好还是分开。。
//note::
自己实验上面那个问题的时候遇到不少小问题。。比如:Makefile.am中指定头文件时,可以使用INCLUDE=-I./include也可以使用AM_CFLAGS=-I./include和AM_CPPFLAGS=-I./include当我使用AM_CPPFLAGS的时候,xxx.c的文件会作为xxx.cpp去编译。。一开始使用的文件就是cpp,但是引用的文件是c,虽然了解cpp对函数名做了修饰。。但是没有实战光是理论就会出洋像啊。。。出现了找不到的外部符号。。然后把后缀改成.c后,还是未定义的符号。。仔细看怎么还是xxx.cpp...于是才去关注AM_CFLAGS和AM_CPPFLAGS。。不过我没去实验使用AM_CFLAGS,偷懒直接用了INCLUDES。。。结果就正确了,使用gcc去编译了。。
还有就是最终生成的文件不要和根目录下的任一文件夹同名。。。好像make的时候会先去删除最终文件吧?总之如果有同名文件夹就会报错:***是一个文件夹。。