作者shininglion (lionking - 辛巴)
看板NCTU_CS_EDA
标题[心得] autoconf - 自动产生 Makefile 的好东西 (2)
时间Mon Feb 13 17:21:19 2012
上一篇提到我们一开始需要先执行 autoscan 来扫描整个 project
扫描完後我们会看到资料夹内多了两个档案:
autoscan.log 以及 configure.scan
autoscan.log 是 log file,不过他是空的XD
而另外一个 configure.scan 则是之後要让 autoconf
帮我们产生我们所要的 configure 这支 script 所必要的资料
而在刚刚 autoscan 时这里面其实就已经具备了一些必要的资料了
以下分项说明:
1. # 开头的东西照惯例,是注解
2. AC_PREREQ([2.65])
这边规定 autoconf 的版本要比这边的数字还要新!
3. AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
这是给 autoconf 用的起始资讯,不用动他
4. AC_CONFIG_SRCDIR([main.cpp]) 以及
AC_CONFIG_HEADERS([config.h])
这两行请直接注解他XD
这是用在有些 project release 後要让别人可以依照自己的想法
自行对这个 project 作一些设定,不过他使用上有点复杂
所以请直接注解他不要让他有作用XD
5. AC_PROG_CXX
这行依照 project 不同可能会变成
AC_PROG_C
不管是哪个,用意都是在检查系统内有没有 C/C++ compiler
AC_PROG_C --> 检查有没有 gcc
AC_PROG_CXX --> 检查有没有 g++
6. 直到最後的 AC_OUTPUT 为止
可以注解掉也可以放着不理他
7. AC_OUTPUT
执行 configure 这支 script 结束後会产生什麽档案
在这边因为我们希望他自动产生 Makefile
所以请将他修改成
AC_OUTPUT(Makefile)
OK~到此为止是 autoscan 帮我们弄出来的资料
接下来我们只要自行修改一个地方以符合我们的 project:
1. 请在
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
这行後面加上
AM_INIT_AUTOMAKE(PACKAGE, VERSION)
这一行是让之後的 automake 可以正常执行
其中 PACKAGE 可以看成是这个 project 的名称
VERSION 则是版本编号
所以这边请自订XD
加上这行後即可,接下来介绍 Makefile.am 要怎麽写:
1. 请加上这行:
AUTOMAKE_OPTIONS=foreign
这一行的用意是告诉 automake 不要照 GNU 的标准来做
不然他会要求你附上以下档案:
AUTHOR、README、ChangeLog、NEWS
档案内容是空的也无妨
2. 加上以下这行:
bin_PROGRAMS=(你要的执行档名称)
或者是
noinst_PROGRAMS=(你要的执行档名称)
两者的差别在於前者是假设这个执行档之後会被用来安装
例如使用 $ make install 安装到你的系统
而後者不会,所以产生出来的 Makefile 会不同
举个例子来说,我可以这样写:
noinst_PROGRAMS=hello
表示之後会产生一个名称叫 hello 的执行档
3. 根据刚刚设定好的执行档名称,写上他需要由那些档案编成:
(执行档名称)_SOURCES=(需要那些档案)
以刚刚的例子来说,假设要编出 hello 这个执行档需要
main.cpp a.cpp b.cpp a.h b.h
这一行就写成:
hello_SOURCES=main.cpp a.cpp b.cpp a.h b.h
至於要怎麽由那些档案编出 hello 这个执行档
automake 自有办法判断,
这边不必写明!
好! 这样就大功告成啦!
接下来只要告刚刚第一篇的流程
就可以生出你想要的 configure 这支 script 罗!
当然 autoconf 还有很多东西可以讲
包含说要怎麽判断系统中有没有什麽东西
可以在 configure 中设定 project 的参数等等
还有要 link 那些 library 之类的
这些东西~我就不多说了XD
Reference:
http://tinyurl.com/78t3hyr
http://www.ibm.com/developerworks/cn/linux/l-makefile/
http://blog.roodo.com/rocksaying/archives/12687975.html
http://jyhshin.pixnet.net/blog/post/26588146-using-automake-and-autoconf
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.241.158
※ 编辑: shininglion 来自: 220.133.134.61 (02/13 19:48)