我的总结:
makefile生成过程:4个步骤,层层依赖,每一个步骤都依赖于上一个步骤的结果。 aclocal.m4文件→→→configure文件→→→为源文件编写makefie.am→→→Makefile.in→→→Makefile文件
简化生成makefile的过程:只需要4步:
执行aclocal,产生aclocal.m4文件 aclocal是一个perl 脚本程序,它的定义是:
aclocal -create aclocal.m4 by scanning configure.ac
aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。而aclocal.m4文件中,包含了生成configure文件所必须的宏。
执行autoconf,生成configure文件 autoconf会根据configure.in和aclocal.m4文件,生成configure文件。
执行automake命令,产生Makefile.in automake --add-missing
automake会根据Makefile.am文件产生一些文件,包含最重要的Makefile.in。前面所生成的configure,会根据Makefile.in文件,来生成最终的Makefile文件。
执行configure命令,生成Makefile文件 这样,就产生了编译所需要的Makefile文件。运行make,即可编译。makefile生成过程:aclocal.m4文件→→→configure文件→→→为源文件编写makefie.am→→→Makefile.in→→→Makefile文件
这个只是针对文件,并不是代码,重点看文件的操作。
主要还是能够看懂makefile。
每个目录下都有 makefile.in ,makefie.am ,
自动生成makefile例子 这个例子共有三个C文件,main.c,add/add.c和sub/sub.c。源代码如下:
/main.c/
#include
int main(void)
{
printf("%d\n",add(sub(100,5),1));
return 0;
}
/* add/add.c */
int add(int x,int y)
{
return x+y;
}
/* sub/sub.c */
int sub(int x,int y)
{
return x-y;
}
Q:自动生成makefile需要手动输入什么文件,作用是什么?
按照makefile生成的流程执行,需要手动输入的文件只有两类configure.in和makefile.am。
操作在包含源文件的项目目录下进行。 (1). 运行autoscan,生成文件configure.scan。 (2). 修改configure.scan,改名为configure.in。 (3).运行autoheader,生成文件configure.h.in(现在一般改为configure.ac)。configure.in里有宏AC_CONFIG_HEADER()时用。 (4).运行libtoolize,生成一些支持文件,ltmain.sh。需要用libtool生成共享库用。 (5).运行allocal,生成aclocal.m4。 (6). 运行autoconf,生成configure。 (7).为源文件编写makefie.am,每一个包含源文件的目录和子目录都有一个makefile.am。 (8).运行automake,生成makefile.in,每个包含makefile.am的子目录都生成makefile.in。 automake -a选项可以补齐文件config.guess,config.sub,install-sh,missing,depcomp。 (9).运行./configure,生成config.status,config.h,makefile。 (10).运行make,生成中间文件对象文件,库文件,最后生成可执行文件。
怎么样 最快地学会配置生成makefile,直接上hello world
1、建目录 在你的工作目录下建一个helloworld目录,我们用它来存放helloworld程序及相关文件,如在/home/my/build下: $ mkdir helloword $ cd helloworld 2、 helloworld.c 然后用你自己最喜欢的编辑器写一个hellowrold.c文件,如命令:vi helloworld.c。使用下面的代码作为helloworld.c的内容。 int main(int argc, char** argv) { printf(“Hello, Linux World!\n”); return 0; } 完成后保存退出。 现在在helloworld目录下就应该有一个你自己写的helloworld.c了。 3、生成configure