首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C&C++入门学习-automake应用

2012-07-05 
C&C++入门学习-automake使用这两天一直在捣腾C&C++在linux上的工程编译和打包上,具体来说是使用automake生

C&C++入门学习-automake使用
这两天一直在捣腾C&C++在linux上的工程编译和打包上,具体来说是使用automake生成makefile,然后make出二进制包,未做make install(实际也就是复制某些头文件到系统的xxxx/include下,以及so包或者其他类型的库文件复制到系统的xxx/lib下)。

工程依赖的一个第三方包通过源码编译而来,除非这个第三方包发生变化,否则主工程编译不会去编译他。目录类似

program/   -third-source/       -include/       -libttt.a       -Makefile   -src/       -Makefile.am   -configure.ac   -Makefile.am


主要的编译命令如下:
libtoolize --forceaclocalautoconfautomake --add-missing --force./configuremake


Makefile.am和configure.ac需要自己写,总Makefile.am指定需要扫描的子目录(或者需要make的子目录)。比如
SUBDIRS=@VE_SUBDIRS@


@VE_SUBDIRS@这个定义在configure.ac中(./configure这个步骤替换@@占位符),类似
VE_SUBDIRS="src"AC_SUBST(VE_SUBDIRS)


这里我指定了只去src下进行make,因为third-source有自己的编译方式。

configure.ac这个文件中还可以指定为子目录生成Makefile,人肉去写Makefile是非常困难的事情,但是使用automake工具生成还是不错的
AC_CONFIG_FILES(Makefile  src/Makefile)


具体包含有如何编译链接库和头文件的信息的Makefile.am则有一些复杂。
bin_PROGRAMS=test.outtest_out_SOURCES=test.cpptest_out_LDFLAGS=-module ../third-source/libttt.a -lpthreadtest_out_CFLAGS=$(AM_CFLAGS) -I../third-source/includetest_out_CXXFLAGS = ${test_out_CFLAGS}noinst_HEADERS =   xxx.hpp xxx2.hppnoinst_LTLIBRARIES = libxxx.lalibxxx_la_SOURCES = xxx.cpp xxx2.cpp libxxx_la_LDFLAGS = -module ../third-source/libttt.a -lpthreadlibxxx_la_CFLAGS =$(AM_CFLAGS)  -I../third-source/includelibxxx_la_CXXFLAGS = ${libxxx_la_CFLAGS_CFLAGS}


这个am实际上会输出test.out和libxxx.la,前者是一个可执行文件,后面是一个库。
另外LDFAGS指定库链接,而CFLAGS是头文件链接。另外一个非常重要的是CFLAGS是给C编译器使用,而CXXFLAGS是给C++编译器使用,如果你的工程是C++,CXXFLAGS配置千万不要落下,否则可能会因非标准头文件找不到而报错(当然是你需要默认头文件路径之外头文件的前提下),另外pthread为动态链接,-lpthread实际上会去找libpthread.so包,这里会有个默认的命名规则。

看下几个工具总体的生成各种文件的路径图吧(网络收集)。


暂时tips到这里,Makefile.am中的更多更好的强大的功能还需要不断学习,后续用到再加。





热点排行