狠狠撸

狠狠撸Share a Scribd company logo
GNU AutoTools 介绍  Automake, Autoconf and Libtool 黄  颂  2004-10-09
GNU Package 的典型安装 FAQ 0039 @ smth 下载源代码包 foo-1.0.tar.gz tar xvzf foo-1.0.tar.gz cd foo-1.0 ./configure make (su) make install 问题 1 :配置脚本 configure 是怎么生成的? 问题 2 : configure 脚本怎么知道该如何生成 Makefile 幕后英雄—— GNU Auto Tools : autoconf, automake,  libtool, autoscan,  autoheader……
Makefile’s way to develop 三元组 (Target, Dependency, Command) Target : Dep1 Dep2 <TAB>Cmd1  <TAB>Cmd2 [Blank Line]  .s1 .s2 : <TAB>Cmd1  $(var), $<, $@ ……
Makefile’s Big Trouble? GNU 的 Makefile 规范相当复杂,随着项目复杂性的增加,要写出一个正确而高效的 Makefile 相当困难,对新手而言更是如此。 越是复杂的软件越有可能有自己独特的 build 方法,怎么办?每次都重新学习?! 不同的类 Unix 操作系统之间存在着差异,移植性如何保证?需要大量手工编写的脚本和条件编译。
All in One Solution? GNU Auto Tools 是上个世纪 90 年代开始发展起来的一系列辅助开发、打安装包的自动化工具。 各种工具分别开发,但是协同工作的很好。比如 autoconf, automake, libtool 等等。 但是,连开发者自己也承认,这套工具虽然好用,但是学习曲线很陡峭。 困难在于:一套新的思路和习惯,一套自定义的宏和规则,使用者的交流 ?
Hello World – Step by Step 1. hello.c #include <stdio.h> int main() { printf(“Hello World!\n”); return 0; } 2. Makefile.am bin_PROGRAMS = hello hello_SOURCES = hello.c 3. configure.in AC_INIT(hello.c) AM_INIT_AUTOMAKE(hello, 0.1) AC_PROG_CC AC_OUTPUT(Makefile) 4. aclocal  5. autoconf 6. automake --add-missing --foreign 7. ./configure 8. make (make install  安装, make dist  产生安装包 )
Hello World!  演示 —— 如何杀鸡用牛刀
来龙去脉 autoscan configure.scan configure.in Makefile.am Makefile.in Makefile automake edit aclocal.m4 aclocal configure autoconf
configure.in(1) 是 configure 脚本的输入文件,为了解决在不同 unix 变种之间移植程序的问题:库名可能不同,应用程序名可能不同,结构和常量的定义可能不同…… configure 脚本完成 autoconf 与 automake 的初始化工作,为不同的平台定义相应的宏,检测并指定适当的程序名、库名、结构和常量名等等,指定要为哪些目录输出 Makefile 文件。总之,为编译程序做好一切准备工作。
configure.in(2) configure.in 的八股文 基本初始化部分:包括 AC_INIT ( 必须第一个出现 ), AM_INIT_AUTOMAKE( 程序包名,版本号 ), AC_CONFIG_HEADER 可选宏:如 AC_ARG_ENABLE 检测某些程序的存在性 检查程序用到的库
configure.in(3) 检查某些头文件是否存在。 检查 Typedefs and structures 。 检查 Functions 。 指定在哪些目录输出 Makefile 。 Seems troublesome, mmm? Don’t worry, autoscan will do most of the work for you.
Makefile.am(1) 一种比 Makefile 更高层次的规则。只指定要生成什么目标,它由什么源文件生成,要安装到什么目录。 Just simple and stupid!  ? 可执行文件: bin_PROGRAMS = foo foo_SOURCES = foo1.c foo1.h foo2.c foo_LDADD = foo3.o -lm foo4.a foo_LDFLAGS = -L<lib_path> foo_DEPENDENCIES =
Makefile.am(2) 对静态库: lib_LIBRARIES = libfoo.a foo_a_SOURCES = foo_a_LDADD =  foo_a_LIBADD = foo_a_LDFLAGS =  只在 make 时做静态连接用,不安装的库: noinst_LIBRARIES = libfoo.a …… 对头文件: include_HEADERS = foo.h 对数据文件: data_DATA = data1 data2
Makefile.am(3) 全局变量 ( 对所有目标都适用 ) INCLUDES = -I/dir1 -I/dir2 LDFLAGS = -L/dir1 -L/dir2 LDADD = foo.o foo.a -lfoo EXTRA_DIST = file1 file2  源程序和一些默认的文件自动打入 .tar.gz 包,其它文件若要进入 .tar.gz 包可以用这种办法,比如配置文件 ,  数据文件等等 。 SUBDIRS = dir1 dir2  在处理本目录之前要递归处理哪些子目录
Makefile.am(4) 标准安装路径 $(prefix) = /usr/local  是所有安装目录的默认前缀,可以通过 ./configure --prefix=<new_prefix> 的方法覆盖。 其它的预定义目录如: bindir = $(prefix)/bin, libdir = $(prefix)/lib, datadir = $(prefix)/share, sysconfdir = $(prefix)/etc, … 想定义一个新的安装路径?比如 config,  可定义 confdir = $(prefix)/config,  然后 conf_DATA = file1 file2 ,则 file1, file2 会作为数据文件安装到 $(prefix)/config 目录下。
Makefile.am(5) 尽量用相对路径引用源程序的位置,以下两个变量是预定义好的: $(top_srcdir) 无论在哪个目录层次,该变量定义了包含 src 目录的目录位置,用于引用源程序; $(top_builddir) 定义了生成目标文件上最上层目录,用于引用 .o 等编译出来的目标文件。 ……
configure’s Gifts configure 脚本生成的 Makefile 中已经带了很多常用的目标如: check, all, install, uninstall, clean, dist, distcheck, distclean, tags, maintainerclean. If configure or make did it, make distclean undoes it. If make did it, make clean undoes it. If make install did it, make uninstall undoes it. If you did it, make maintainer-clean undoes it.
天网千帆的目录结构
libtool 介绍 生成各种程序库的方便工具。 提供一个统一的接口,程序员不用关心各种烦人的底层细节:不同的平台的库可能要求不同的后缀,不同平台对库的安装方法不同,有些平台不支持动态库等等。 生成高层次的库,称为 libtool library ,后缀是 .la 。用它连接时,默认产生动态连接库,也可以用 -static 参数指定生成静态连接库。 既可单独使用又可与 automake 和 autoconf 一起使用更加强大、方便。
使用 libtool 在 configure.in 文件中加上 AC_PROG_LIBTOOL 宏,如果原来有 AC_PROG_RANLIB 宏,删去它。 在 Makefile.am 文件中: lib_LTLIBRARIES = libshell.la  libshell_la_SOURCES = object.c subr.c symbol.c  与原来的写法非常相似! .la 库只能连入 .lo( 使用 libtool 生成的目标文件 ) libshell_la_LDADD = xmalloc.lo @LTLIBOBJS@  传入库的版本号: libshell_la_LDFLAGS = -version-info 1:0:1  与其它目标文件连接时用 LDFLAGS 指定连接的方式 ( 默认是动态方式): -static, --all-static 指定静态连接。
小结 Autoconf :根据用户提供的 configure.in 文件,生成一个名为 configure 的脚本。该脚本可以搜集有关移植性的平台相关信息,这些信息被用来生成 Makefiles ,配置头文件和其它平台相关的文件。 Automake :根据用户提供的一个高层次的生成规则 Makefile.am ,生成 Makefile 文件的模板 Makefile.in 。 Automake 生成的 Makefiles 符合 GNU 的 Makefile 标准,用户无需再手工编写 Makefile 文件。 Libtool :使得生成内存位置无关的代码且让共享库在不同平台间移成为可能。它可以不依赖 autoconf 和 automake 单独运行,另一方面, automake 和 libtool 可以无缝地集成使用。
References ToolsManual: http://www.amath.washington.edu/~lf/tutorials/autoconf/ AutoBook: http://sources.redhat.com/autobook/ info & man GNU Projects ( 学习其他人的技巧 )
Thanks. Any questions?

More Related Content

What's hot (19)

makefile20141121
makefile20141121makefile20141121
makefile20141121
Kevin Wu
?
我的 Windows 平台自動化經驗:基礎批次檔撰寫實務
我的 Windows 平台自動化經驗:基礎批次檔撰寫實務我的 Windows 平台自動化經驗:基礎批次檔撰寫實務
我的 Windows 平台自動化經驗:基礎批次檔撰寫實務
Will Huang
?
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
yiditushe
?
1, shell intro
1, shell intro1, shell intro
1, shell intro
ted-xu
?
Centos下安装apache + subversion
Centos下安装apache + subversionCentos下安装apache + subversion
Centos下安装apache + subversion
Yiwei Ma
?
Linux commands ppt
Linux commands pptLinux commands ppt
Linux commands ppt
xiaotingting
?
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
Will Huang
?
Introduce to Linux command line
Introduce to Linux command lineIntroduce to Linux command line
Introduce to Linux command line
Wen Liao
?
Linux 系统应用与程序设计
Linux 系统应用与程序设计Linux 系统应用与程序设计
Linux 系统应用与程序设计
yiditushe
?
5, system admin
5, system admin5, system admin
5, system admin
ted-xu
?
系統程式 -- 第 1 章
系統程式 -- 第 1 章系統程式 -- 第 1 章
系統程式 -- 第 1 章
鍾誠 陳鍾誠
?
專題 暑期進度
專題 暑期進度專題 暑期進度
專題 暑期進度
黄振庭
?
尝颈苍耻虫必学的60个命令
尝颈苍耻虫必学的60个命令尝颈苍耻虫必学的60个命令
尝颈苍耻虫必学的60个命令
yiditushe
?
颁语言产别苍肠丑尘补谤办覆盖信息收集总结4
颁语言产别苍肠丑尘补谤办覆盖信息收集总结4颁语言产别苍肠丑尘补谤办覆盖信息收集总结4
颁语言产别苍肠丑尘补谤办覆盖信息收集总结4
Tao He
?
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linux
Feng Yu
?
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
acqua young
?
Php Extension--yahoo(Cc0cc)
Php Extension--yahoo(Cc0cc)Php Extension--yahoo(Cc0cc)
Php Extension--yahoo(Cc0cc)
sunlick
?
开源笔补蝉蝉平台蹿濒测苍苍功能介绍
开源笔补蝉蝉平台蹿濒测苍苍功能介绍开源笔补蝉蝉平台蹿濒测苍苍功能介绍
开源笔补蝉蝉平台蹿濒测苍苍功能介绍
Zhichao Liang
?
makefile20141121
makefile20141121makefile20141121
makefile20141121
Kevin Wu
?
我的 Windows 平台自動化經驗:基礎批次檔撰寫實務
我的 Windows 平台自動化經驗:基礎批次檔撰寫實務我的 Windows 平台自動化經驗:基礎批次檔撰寫實務
我的 Windows 平台自動化經驗:基礎批次檔撰寫實務
Will Huang
?
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
yiditushe
?
1, shell intro
1, shell intro1, shell intro
1, shell intro
ted-xu
?
Centos下安装apache + subversion
Centos下安装apache + subversionCentos下安装apache + subversion
Centos下安装apache + subversion
Yiwei Ma
?
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
Will Huang
?
Introduce to Linux command line
Introduce to Linux command lineIntroduce to Linux command line
Introduce to Linux command line
Wen Liao
?
Linux 系统应用与程序设计
Linux 系统应用与程序设计Linux 系统应用与程序设计
Linux 系统应用与程序设计
yiditushe
?
5, system admin
5, system admin5, system admin
5, system admin
ted-xu
?
專題 暑期進度
專題 暑期進度專題 暑期進度
專題 暑期進度
黄振庭
?
尝颈苍耻虫必学的60个命令
尝颈苍耻虫必学的60个命令尝颈苍耻虫必学的60个命令
尝颈苍耻虫必学的60个命令
yiditushe
?
颁语言产别苍肠丑尘补谤办覆盖信息收集总结4
颁语言产别苍肠丑尘补谤办覆盖信息收集总结4颁语言产别苍肠丑尘补谤办覆盖信息收集总结4
颁语言产别苍肠丑尘补谤办覆盖信息收集总结4
Tao He
?
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linux
Feng Yu
?
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
acqua young
?
Php Extension--yahoo(Cc0cc)
Php Extension--yahoo(Cc0cc)Php Extension--yahoo(Cc0cc)
Php Extension--yahoo(Cc0cc)
sunlick
?
开源笔补蝉蝉平台蹿濒测苍苍功能介绍
开源笔补蝉蝉平台蹿濒测苍苍功能介绍开源笔补蝉蝉平台蹿濒测苍苍功能介绍
开源笔补蝉蝉平台蹿濒测苍苍功能介绍
Zhichao Liang
?

Similar to Gnu (20)

Make talk-cn
Make talk-cnMake talk-cn
Make talk-cn
CapnKernel
?
自动生成 Makefile 的全过程详解!
自动生成 Makefile 的全过程详解!自动生成 Makefile 的全过程详解!
自动生成 Makefile 的全过程详解!
hik_lhz
?
Ch01
Ch01Ch01
Ch01
jashliao
?
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定
Shengyou Fan
?
尝颈苍耻虫系统工程师教程
尝颈苍耻虫系统工程师教程尝颈苍耻虫系统工程师教程
尝颈苍耻虫系统工程师教程
yiditushe
?
How A Compiler Works: GNU Toolchain
How A Compiler Works: GNU ToolchainHow A Compiler Works: GNU Toolchain
How A Compiler Works: GNU Toolchain
National Cheng Kung University
?
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for Mac
MarsZ Chen
?
础苍诲谤辞颈诲系统移植技术详解
础苍诲谤辞颈诲系统移植技术详解础苍诲谤辞颈诲系统移植技术详解
础苍诲谤辞颈诲系统移植技术详解
zzc89522
?
狈补驳颈辞蝉的安装部署和与肠补肠迟颈的整合(濒颈苍耻虫迟辞苍别)
狈补驳颈辞蝉的安装部署和与肠补肠迟颈的整合(濒颈苍耻虫迟辞苍别)狈补驳颈辞蝉的安装部署和与肠补肠迟颈的整合(濒颈苍耻虫迟辞苍别)
狈补驳颈辞蝉的安装部署和与肠补肠迟颈的整合(濒颈苍耻虫迟辞苍别)
Yiwei Ma
?
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
National Cheng Kung University
?
Subversion
SubversionSubversion
Subversion
i7Xh
?
第1讲 开始编写程序
第1讲 开始编写程序第1讲 开始编写程序
第1讲 开始编写程序
ruandao
?
六步教你学会简单搁尘颈
六步教你学会简单搁尘颈六步教你学会简单搁尘颈
六步教你学会简单搁尘颈
yiditushe
?
Kick start无人值守批量安装linux
Kick start无人值守批量安装linuxKick start无人值守批量安装linux
Kick start无人值守批量安装linux
Yiwei Ma
?
20030623 linuxbasic and-security
20030623 linuxbasic and-security20030623 linuxbasic and-security
20030623 linuxbasic and-security
建融 黃
?
使用搁辫尘&补尘辫;测耻尘进行基础软件管理
使用搁辫尘&补尘辫;测耻尘进行基础软件管理使用搁辫尘&补尘辫;测耻尘进行基础软件管理
使用搁辫尘&补尘辫;测耻尘进行基础软件管理
Jason Zheng
?
使用搁辫尘&补尘辫;测耻尘进行基础软件管理
使用搁辫尘&补尘辫;测耻尘进行基础软件管理使用搁辫尘&补尘辫;测耻尘进行基础软件管理
使用搁辫尘&补尘辫;测耻尘进行基础软件管理
haiyuan ning
?
翱谤补濒颈耻虫+尘测蝉辩濒5单机多实例安装文档
翱谤补濒颈耻虫+尘测蝉辩濒5单机多实例安装文档翱谤补濒颈耻虫+尘测蝉辩濒5单机多实例安装文档
翱谤补濒颈耻虫+尘测蝉辩濒5单机多实例安装文档
xuebao_zx
?
自动生成 Makefile 的全过程详解!
自动生成 Makefile 的全过程详解!自动生成 Makefile 的全过程详解!
自动生成 Makefile 的全过程详解!
hik_lhz
?
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定
Shengyou Fan
?
尝颈苍耻虫系统工程师教程
尝颈苍耻虫系统工程师教程尝颈苍耻虫系统工程师教程
尝颈苍耻虫系统工程师教程
yiditushe
?
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for Mac
MarsZ Chen
?
础苍诲谤辞颈诲系统移植技术详解
础苍诲谤辞颈诲系统移植技术详解础苍诲谤辞颈诲系统移植技术详解
础苍诲谤辞颈诲系统移植技术详解
zzc89522
?
狈补驳颈辞蝉的安装部署和与肠补肠迟颈的整合(濒颈苍耻虫迟辞苍别)
狈补驳颈辞蝉的安装部署和与肠补肠迟颈的整合(濒颈苍耻虫迟辞苍别)狈补驳颈辞蝉的安装部署和与肠补肠迟颈的整合(濒颈苍耻虫迟辞苍别)
狈补驳颈辞蝉的安装部署和与肠补肠迟颈的整合(濒颈苍耻虫迟辞苍别)
Yiwei Ma
?
Subversion
SubversionSubversion
Subversion
i7Xh
?
第1讲 开始编写程序
第1讲 开始编写程序第1讲 开始编写程序
第1讲 开始编写程序
ruandao
?
六步教你学会简单搁尘颈
六步教你学会简单搁尘颈六步教你学会简单搁尘颈
六步教你学会简单搁尘颈
yiditushe
?
Kick start无人值守批量安装linux
Kick start无人值守批量安装linuxKick start无人值守批量安装linux
Kick start无人值守批量安装linux
Yiwei Ma
?
20030623 linuxbasic and-security
20030623 linuxbasic and-security20030623 linuxbasic and-security
20030623 linuxbasic and-security
建融 黃
?
使用搁辫尘&补尘辫;测耻尘进行基础软件管理
使用搁辫尘&补尘辫;测耻尘进行基础软件管理使用搁辫尘&补尘辫;测耻尘进行基础软件管理
使用搁辫尘&补尘辫;测耻尘进行基础软件管理
Jason Zheng
?
使用搁辫尘&补尘辫;测耻尘进行基础软件管理
使用搁辫尘&补尘辫;测耻尘进行基础软件管理使用搁辫尘&补尘辫;测耻尘进行基础软件管理
使用搁辫尘&补尘辫;测耻尘进行基础软件管理
haiyuan ning
?
翱谤补濒颈耻虫+尘测蝉辩濒5单机多实例安装文档
翱谤补濒颈耻虫+尘测蝉辩濒5单机多实例安装文档翱谤补濒颈耻虫+尘测蝉辩濒5单机多实例安装文档
翱谤补濒颈耻虫+尘测蝉辩濒5单机多实例安装文档
xuebao_zx
?

Recently uploaded (18)

础颁罢考试代考,础笔考试替考,滨叠考试代考【微信贬补肠办谤404】,础-濒别惫别濒考试替考,翱-濒别惫别濒考试代考,滨骋颁厂贰考试代考,鲍颁础罢考试替考,...
础颁罢考试代考,础笔考试替考,滨叠考试代考【微信贬补肠办谤404】,础-濒别惫别濒考试替考,翱-濒别惫别濒考试代考,滨骋颁厂贰考试代考,鲍颁础罢考试替考,...础颁罢考试代考,础笔考试替考,滨叠考试代考【微信贬补肠办谤404】,础-濒别惫别濒考试替考,翱-濒别惫别濒考试代考,滨骋颁厂贰考试代考,鲍颁础罢考试替考,...
础颁罢考试代考,础笔考试替考,滨叠考试代考【微信贬补肠办谤404】,础-濒别惫别濒考试替考,翱-濒别惫别濒考试代考,滨骋颁厂贰考试代考,鲍颁础罢考试替考,...
【微信VQiChen】澳洲改成绩,澳洲改分,澳大利亚改成绩黑客如何入侵大学网站改成绩的?成绩修改 韩国中学成绩修改 日本中学成绩修改 泰国中学成绩修改美国大学挂科改成绩 英国大学挂科改成绩
?
职场霸凌与公司责任:打造健康友善的工作环境-动物医事助理训练教材-詹翔霖副教授教材图档.诲辞肠虫
职场霸凌与公司责任:打造健康友善的工作环境-动物医事助理训练教材-詹翔霖副教授教材图档.诲辞肠虫职场霸凌与公司责任:打造健康友善的工作环境-动物医事助理训练教材-詹翔霖副教授教材图档.诲辞肠虫
职场霸凌与公司责任:打造健康友善的工作环境-动物医事助理训练教材-詹翔霖副教授教材图档.诲辞肠虫
https://mypaper.pchome.com.tw/chanrs/post/1381109792
?
尝厂础罢考试代考方案,础笔考试替考攻略【微贬补肠办谤404信】,滨叠考试代考教程,罢翱贰滨颁考试保分替考案例,笔罢贰考试代考经验,雅思考试代考技巧,托福考...
尝厂础罢考试代考方案,础笔考试替考攻略【微贬补肠办谤404信】,滨叠考试代考教程,罢翱贰滨颁考试保分替考案例,笔罢贰考试代考经验,雅思考试代考技巧,托福考...尝厂础罢考试代考方案,础笔考试替考攻略【微贬补肠办谤404信】,滨叠考试代考教程,罢翱贰滨颁考试保分替考案例,笔罢贰考试代考经验,雅思考试代考技巧,托福考...
尝厂础罢考试代考方案,础笔考试替考攻略【微贬补肠办谤404信】,滨叠考试代考教程,罢翱贰滨颁考试保分替考案例,笔罢贰考试代考经验,雅思考试代考技巧,托福考...
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
黑客技术修改内华达大学成绩,【微贬补肠办谤404信】黑客改成绩服务,黑客快速修改亚利桑那大学成绩,黑客技术修改新墨西哥州立大学成绩,黑客改成绩团队,黑客快...
黑客技术修改内华达大学成绩,【微贬补肠办谤404信】黑客改成绩服务,黑客快速修改亚利桑那大学成绩,黑客技术修改新墨西哥州立大学成绩,黑客改成绩团队,黑客快...黑客技术修改内华达大学成绩,【微贬补肠办谤404信】黑客改成绩服务,黑客快速修改亚利桑那大学成绩,黑客技术修改新墨西哥州立大学成绩,黑客改成绩团队,黑客快...
黑客技术修改内华达大学成绩,【微贬补肠办谤404信】黑客改成绩服务,黑客快速修改亚利桑那大学成绩,黑客技术修改新墨西哥州立大学成绩,黑客改成绩团队,黑客快...
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
黑客改成绩:入侵技术与痕迹清理的深度解析【微贬补肠办谤404信】漏洞利用,权限提升,数据库修改,痕迹清理,隐匿技术
黑客改成绩:入侵技术与痕迹清理的深度解析【微贬补肠办谤404信】漏洞利用,权限提升,数据库修改,痕迹清理,隐匿技术黑客改成绩:入侵技术与痕迹清理的深度解析【微贬补肠办谤404信】漏洞利用,权限提升,数据库修改,痕迹清理,隐匿技术
黑客改成绩:入侵技术与痕迹清理的深度解析【微贬补肠办谤404信】漏洞利用,权限提升,数据库修改,痕迹清理,隐匿技术
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
佐治亚理工学院代考服务详解【微信贬补肠办谤404】佛罗里达州立大学代考,乔治亚大学替考,田纳西州立大学代考,肯塔基州立大学保分替考,阿拉巴马州立大学代考,...
佐治亚理工学院代考服务详解【微信贬补肠办谤404】佛罗里达州立大学代考,乔治亚大学替考,田纳西州立大学代考,肯塔基州立大学保分替考,阿拉巴马州立大学代考,...佐治亚理工学院代考服务详解【微信贬补肠办谤404】佛罗里达州立大学代考,乔治亚大学替考,田纳西州立大学代考,肯塔基州立大学保分替考,阿拉巴马州立大学代考,...
佐治亚理工学院代考服务详解【微信贬补肠办谤404】佛罗里达州立大学代考,乔治亚大学替考,田纳西州立大学代考,肯塔基州立大学保分替考,阿拉巴马州立大学代考,...
【微信VQiChen】澳洲改成绩,澳洲改分,澳大利亚改成绩黑客如何入侵大学网站改成绩的?成绩修改 韩国中学成绩修改 日本中学成绩修改 泰国中学成绩修改美国大学挂科改成绩 英国大学挂科改成绩
?
滨黑客改成绩的背后:技术炫耀还是经济利益驱动?【微贬补肠办谤404信】教育系统网络安全漏洞:黑客改成绩事件频发的根源
滨黑客改成绩的背后:技术炫耀还是经济利益驱动?【微贬补肠办谤404信】教育系统网络安全漏洞:黑客改成绩事件频发的根源滨黑客改成绩的背后:技术炫耀还是经济利益驱动?【微贬补肠办谤404信】教育系统网络安全漏洞:黑客改成绩事件频发的根源
滨黑客改成绩的背后:技术炫耀还是经济利益驱动?【微贬补肠办谤404信】教育系统网络安全漏洞:黑客改成绩事件频发的根源
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
国外学历代办,教育部学历认证,留学认证服务【微贬补肠办谤404信】办理英国学历,美国学历,法国学历,德国学历认证
国外学历代办,教育部学历认证,留学认证服务【微贬补肠办谤404信】办理英国学历,美国学历,法国学历,德国学历认证国外学历代办,教育部学历认证,留学认证服务【微贬补肠办谤404信】办理英国学历,美国学历,法国学历,德国学历认证
国外学历代办,教育部学历认证,留学认证服务【微贬补肠办谤404信】办理英国学历,美国学历,法国学历,德国学历认证
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
职场霸凌防治及处理案例-动物医院训练教材-詹翔霖副教授「「云云」凶杀命案」.诲辞肠虫
职场霸凌防治及处理案例-动物医院训练教材-詹翔霖副教授「「云云」凶杀命案」.诲辞肠虫职场霸凌防治及处理案例-动物医院训练教材-詹翔霖副教授「「云云」凶杀命案」.诲辞肠虫
职场霸凌防治及处理案例-动物医院训练教材-詹翔霖副教授「「云云」凶杀命案」.诲辞肠虫
https://mypaper.pchome.com.tw/chanrs/post/1381109792
?
bb8c5c4e-d1de-496f-ab1a-49e8f9c64a1a.pptx
bb8c5c4e-d1de-496f-ab1a-49e8f9c64a1a.pptxbb8c5c4e-d1de-496f-ab1a-49e8f9c64a1a.pptx
bb8c5c4e-d1de-496f-ab1a-49e8f9c64a1a.pptx
ronalyncaju
?
黑客改成绩服务,黑客快速修改麻省理工成绩【微贬补肠办谤404信】黑客技术修改牛津大学成绩,黑客改成绩团队,黑客快速修改剑桥大学成绩,黑客技术修改加州理工成...
黑客改成绩服务,黑客快速修改麻省理工成绩【微贬补肠办谤404信】黑客技术修改牛津大学成绩,黑客改成绩团队,黑客快速修改剑桥大学成绩,黑客技术修改加州理工成...黑客改成绩服务,黑客快速修改麻省理工成绩【微贬补肠办谤404信】黑客技术修改牛津大学成绩,黑客改成绩团队,黑客快速修改剑桥大学成绩,黑客技术修改加州理工成...
黑客改成绩服务,黑客快速修改麻省理工成绩【微贬补肠办谤404信】黑客技术修改牛津大学成绩,黑客改成绩团队,黑客快速修改剑桥大学成绩,黑客技术修改加州理工成...
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
O-level Mathematics代考,【微信VQiChen】GCSE Mathematics替考,UCAT Quantitative Reasoni...
O-level Mathematics代考,【微信VQiChen】GCSE Mathematics替考,UCAT Quantitative Reasoni...O-level Mathematics代考,【微信VQiChen】GCSE Mathematics替考,UCAT Quantitative Reasoni...
O-level Mathematics代考,【微信VQiChen】GCSE Mathematics替考,UCAT Quantitative Reasoni...
【微信VQiChen】澳洲改成绩,澳洲改分,澳大利亚改成绩黑客如何入侵大学网站改成绩的?成绩修改 韩国中学成绩修改 日本中学成绩修改 泰国中学成绩修改美国大学挂科改成绩 英国大学挂科改成绩
?
顿顿辞厂攻击服务,网站瘫痪服务,恶意软件定制【微信贬补肠办谤404】开发病毒服务,勒索软件开发,黑客入侵大学网站修改成绩,黑客删除论坛文章
顿顿辞厂攻击服务,网站瘫痪服务,恶意软件定制【微信贬补肠办谤404】开发病毒服务,勒索软件开发,黑客入侵大学网站修改成绩,黑客删除论坛文章顿顿辞厂攻击服务,网站瘫痪服务,恶意软件定制【微信贬补肠办谤404】开发病毒服务,勒索软件开发,黑客入侵大学网站修改成绩,黑客删除论坛文章
顿顿辞厂攻击服务,网站瘫痪服务,恶意软件定制【微信贬补肠办谤404】开发病毒服务,勒索软件开发,黑客入侵大学网站修改成绩,黑客删除论坛文章
【微信VQiChen】澳洲改成绩,澳洲改分,澳大利亚改成绩黑客如何入侵大学网站改成绩的?成绩修改 韩国中学成绩修改 日本中学成绩修改 泰国中学成绩修改美国大学挂科改成绩 英国大学挂科改成绩
?
成绩篡改、SQL注入、日志清理、数据库安全、日志监控 【微Hackr404信】黑客入侵、修改成绩、漏洞扫描、社会工程学、网络安全防护
成绩篡改、SQL注入、日志清理、数据库安全、日志监控  【微Hackr404信】黑客入侵、修改成绩、漏洞扫描、社会工程学、网络安全防护成绩篡改、SQL注入、日志清理、数据库安全、日志监控  【微Hackr404信】黑客入侵、修改成绩、漏洞扫描、社会工程学、网络安全防护
成绩篡改、SQL注入、日志清理、数据库安全、日志监控 【微Hackr404信】黑客入侵、修改成绩、漏洞扫描、社会工程学、网络安全防护
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
黑客改成绩:如何通过DNS劫持绕过安全防护? 【微Hackr404信】 从域名解析到流量重定向,揭秘黑客的DNS劫持技术
黑客改成绩:如何通过DNS劫持绕过安全防护?   【微Hackr404信】 从域名解析到流量重定向,揭秘黑客的DNS劫持技术黑客改成绩:如何通过DNS劫持绕过安全防护?   【微Hackr404信】 从域名解析到流量重定向,揭秘黑客的DNS劫持技术
黑客改成绩:如何通过DNS劫持绕过安全防护? 【微Hackr404信】 从域名解析到流量重定向,揭秘黑客的DNS劫持技术
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
黑客改成绩方法,【微贬补肠办谤404信】黑客快速修改爱达荷大学成绩,黑客技术修改北达科他大学成绩,黑客改成绩流程,黑客快速修改南达科他大学成绩,黑客技术修...
黑客改成绩方法,【微贬补肠办谤404信】黑客快速修改爱达荷大学成绩,黑客技术修改北达科他大学成绩,黑客改成绩流程,黑客快速修改南达科他大学成绩,黑客技术修...黑客改成绩方法,【微贬补肠办谤404信】黑客快速修改爱达荷大学成绩,黑客技术修改北达科他大学成绩,黑客改成绩流程,黑客快速修改南达科他大学成绩,黑客技术修...
黑客改成绩方法,【微贬补肠办谤404信】黑客快速修改爱达荷大学成绩,黑客技术修改北达科他大学成绩,黑客改成绩流程,黑客快速修改南达科他大学成绩,黑客技术修...
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
2 风中的树苗 :理解与深究(加入第1至第4题)semakan kssr Bahasa cina tahun 1
2 风中的树苗 :理解与深究(加入第1至第4题)semakan kssr Bahasa cina tahun 12 风中的树苗 :理解与深究(加入第1至第4题)semakan kssr Bahasa cina tahun 1
2 风中的树苗 :理解与深究(加入第1至第4题)semakan kssr Bahasa cina tahun 1
g62042289
?
黑客改成绩快速安全?!【微Hackr404信】黑客入侵教务系统修改成绩 - 找黑客改成绩 - 黑客改分 - 找黑客修改成绩 - 黑客改成绩...
黑客改成绩快速安全?!【微Hackr404信】黑客入侵教务系统修改成绩   - 找黑客改成绩   - 黑客改分   - 找黑客修改成绩   - 黑客改成绩...黑客改成绩快速安全?!【微Hackr404信】黑客入侵教务系统修改成绩   - 找黑客改成绩   - 黑客改分   - 找黑客修改成绩   - 黑客改成绩...
黑客改成绩快速安全?!【微Hackr404信】黑客入侵教务系统修改成绩 - 找黑客改成绩 - 黑客改分 - 找黑客修改成绩 - 黑客改成绩...
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
职场霸凌与公司责任:打造健康友善的工作环境-动物医事助理训练教材-詹翔霖副教授教材图档.诲辞肠虫
职场霸凌与公司责任:打造健康友善的工作环境-动物医事助理训练教材-詹翔霖副教授教材图档.诲辞肠虫职场霸凌与公司责任:打造健康友善的工作环境-动物医事助理训练教材-詹翔霖副教授教材图档.诲辞肠虫
职场霸凌与公司责任:打造健康友善的工作环境-动物医事助理训练教材-詹翔霖副教授教材图档.诲辞肠虫
https://mypaper.pchome.com.tw/chanrs/post/1381109792
?
尝厂础罢考试代考方案,础笔考试替考攻略【微贬补肠办谤404信】,滨叠考试代考教程,罢翱贰滨颁考试保分替考案例,笔罢贰考试代考经验,雅思考试代考技巧,托福考...
尝厂础罢考试代考方案,础笔考试替考攻略【微贬补肠办谤404信】,滨叠考试代考教程,罢翱贰滨颁考试保分替考案例,笔罢贰考试代考经验,雅思考试代考技巧,托福考...尝厂础罢考试代考方案,础笔考试替考攻略【微贬补肠办谤404信】,滨叠考试代考教程,罢翱贰滨颁考试保分替考案例,笔罢贰考试代考经验,雅思考试代考技巧,托福考...
尝厂础罢考试代考方案,础笔考试替考攻略【微贬补肠办谤404信】,滨叠考试代考教程,罢翱贰滨颁考试保分替考案例,笔罢贰考试代考经验,雅思考试代考技巧,托福考...
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
黑客技术修改内华达大学成绩,【微贬补肠办谤404信】黑客改成绩服务,黑客快速修改亚利桑那大学成绩,黑客技术修改新墨西哥州立大学成绩,黑客改成绩团队,黑客快...
黑客技术修改内华达大学成绩,【微贬补肠办谤404信】黑客改成绩服务,黑客快速修改亚利桑那大学成绩,黑客技术修改新墨西哥州立大学成绩,黑客改成绩团队,黑客快...黑客技术修改内华达大学成绩,【微贬补肠办谤404信】黑客改成绩服务,黑客快速修改亚利桑那大学成绩,黑客技术修改新墨西哥州立大学成绩,黑客改成绩团队,黑客快...
黑客技术修改内华达大学成绩,【微贬补肠办谤404信】黑客改成绩服务,黑客快速修改亚利桑那大学成绩,黑客技术修改新墨西哥州立大学成绩,黑客改成绩团队,黑客快...
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
黑客改成绩:入侵技术与痕迹清理的深度解析【微贬补肠办谤404信】漏洞利用,权限提升,数据库修改,痕迹清理,隐匿技术
黑客改成绩:入侵技术与痕迹清理的深度解析【微贬补肠办谤404信】漏洞利用,权限提升,数据库修改,痕迹清理,隐匿技术黑客改成绩:入侵技术与痕迹清理的深度解析【微贬补肠办谤404信】漏洞利用,权限提升,数据库修改,痕迹清理,隐匿技术
黑客改成绩:入侵技术与痕迹清理的深度解析【微贬补肠办谤404信】漏洞利用,权限提升,数据库修改,痕迹清理,隐匿技术
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
滨黑客改成绩的背后:技术炫耀还是经济利益驱动?【微贬补肠办谤404信】教育系统网络安全漏洞:黑客改成绩事件频发的根源
滨黑客改成绩的背后:技术炫耀还是经济利益驱动?【微贬补肠办谤404信】教育系统网络安全漏洞:黑客改成绩事件频发的根源滨黑客改成绩的背后:技术炫耀还是经济利益驱动?【微贬补肠办谤404信】教育系统网络安全漏洞:黑客改成绩事件频发的根源
滨黑客改成绩的背后:技术炫耀还是经济利益驱动?【微贬补肠办谤404信】教育系统网络安全漏洞:黑客改成绩事件频发的根源
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
国外学历代办,教育部学历认证,留学认证服务【微贬补肠办谤404信】办理英国学历,美国学历,法国学历,德国学历认证
国外学历代办,教育部学历认证,留学认证服务【微贬补肠办谤404信】办理英国学历,美国学历,法国学历,德国学历认证国外学历代办,教育部学历认证,留学认证服务【微贬补肠办谤404信】办理英国学历,美国学历,法国学历,德国学历认证
国外学历代办,教育部学历认证,留学认证服务【微贬补肠办谤404信】办理英国学历,美国学历,法国学历,德国学历认证
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
职场霸凌防治及处理案例-动物医院训练教材-詹翔霖副教授「「云云」凶杀命案」.诲辞肠虫
职场霸凌防治及处理案例-动物医院训练教材-詹翔霖副教授「「云云」凶杀命案」.诲辞肠虫职场霸凌防治及处理案例-动物医院训练教材-詹翔霖副教授「「云云」凶杀命案」.诲辞肠虫
职场霸凌防治及处理案例-动物医院训练教材-詹翔霖副教授「「云云」凶杀命案」.诲辞肠虫
https://mypaper.pchome.com.tw/chanrs/post/1381109792
?
bb8c5c4e-d1de-496f-ab1a-49e8f9c64a1a.pptx
bb8c5c4e-d1de-496f-ab1a-49e8f9c64a1a.pptxbb8c5c4e-d1de-496f-ab1a-49e8f9c64a1a.pptx
bb8c5c4e-d1de-496f-ab1a-49e8f9c64a1a.pptx
ronalyncaju
?
黑客改成绩服务,黑客快速修改麻省理工成绩【微贬补肠办谤404信】黑客技术修改牛津大学成绩,黑客改成绩团队,黑客快速修改剑桥大学成绩,黑客技术修改加州理工成...
黑客改成绩服务,黑客快速修改麻省理工成绩【微贬补肠办谤404信】黑客技术修改牛津大学成绩,黑客改成绩团队,黑客快速修改剑桥大学成绩,黑客技术修改加州理工成...黑客改成绩服务,黑客快速修改麻省理工成绩【微贬补肠办谤404信】黑客技术修改牛津大学成绩,黑客改成绩团队,黑客快速修改剑桥大学成绩,黑客技术修改加州理工成...
黑客改成绩服务,黑客快速修改麻省理工成绩【微贬补肠办谤404信】黑客技术修改牛津大学成绩,黑客改成绩团队,黑客快速修改剑桥大学成绩,黑客技术修改加州理工成...
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
成绩篡改、SQL注入、日志清理、数据库安全、日志监控 【微Hackr404信】黑客入侵、修改成绩、漏洞扫描、社会工程学、网络安全防护
成绩篡改、SQL注入、日志清理、数据库安全、日志监控  【微Hackr404信】黑客入侵、修改成绩、漏洞扫描、社会工程学、网络安全防护成绩篡改、SQL注入、日志清理、数据库安全、日志监控  【微Hackr404信】黑客入侵、修改成绩、漏洞扫描、社会工程学、网络安全防护
成绩篡改、SQL注入、日志清理、数据库安全、日志监控 【微Hackr404信】黑客入侵、修改成绩、漏洞扫描、社会工程学、网络安全防护
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
黑客改成绩:如何通过DNS劫持绕过安全防护? 【微Hackr404信】 从域名解析到流量重定向,揭秘黑客的DNS劫持技术
黑客改成绩:如何通过DNS劫持绕过安全防护?   【微Hackr404信】 从域名解析到流量重定向,揭秘黑客的DNS劫持技术黑客改成绩:如何通过DNS劫持绕过安全防护?   【微Hackr404信】 从域名解析到流量重定向,揭秘黑客的DNS劫持技术
黑客改成绩:如何通过DNS劫持绕过安全防护? 【微Hackr404信】 从域名解析到流量重定向,揭秘黑客的DNS劫持技术
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
黑客改成绩方法,【微贬补肠办谤404信】黑客快速修改爱达荷大学成绩,黑客技术修改北达科他大学成绩,黑客改成绩流程,黑客快速修改南达科他大学成绩,黑客技术修...
黑客改成绩方法,【微贬补肠办谤404信】黑客快速修改爱达荷大学成绩,黑客技术修改北达科他大学成绩,黑客改成绩流程,黑客快速修改南达科他大学成绩,黑客技术修...黑客改成绩方法,【微贬补肠办谤404信】黑客快速修改爱达荷大学成绩,黑客技术修改北达科他大学成绩,黑客改成绩流程,黑客快速修改南达科他大学成绩,黑客技术修...
黑客改成绩方法,【微贬补肠办谤404信】黑客快速修改爱达荷大学成绩,黑客技术修改北达科他大学成绩,黑客改成绩流程,黑客快速修改南达科他大学成绩,黑客技术修...
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?
2 风中的树苗 :理解与深究(加入第1至第4题)semakan kssr Bahasa cina tahun 1
2 风中的树苗 :理解与深究(加入第1至第4题)semakan kssr Bahasa cina tahun 12 风中的树苗 :理解与深究(加入第1至第4题)semakan kssr Bahasa cina tahun 1
2 风中的树苗 :理解与深究(加入第1至第4题)semakan kssr Bahasa cina tahun 1
g62042289
?
黑客改成绩快速安全?!【微Hackr404信】黑客入侵教务系统修改成绩 - 找黑客改成绩 - 黑客改分 - 找黑客修改成绩 - 黑客改成绩...
黑客改成绩快速安全?!【微Hackr404信】黑客入侵教务系统修改成绩   - 找黑客改成绩   - 黑客改分   - 找黑客修改成绩   - 黑客改成绩...黑客改成绩快速安全?!【微Hackr404信】黑客入侵教务系统修改成绩   - 找黑客改成绩   - 黑客改分   - 找黑客修改成绩   - 黑客改成绩...
黑客改成绩快速安全?!【微Hackr404信】黑客入侵教务系统修改成绩 - 找黑客改成绩 - 黑客改分 - 找黑客修改成绩 - 黑客改成绩...
【微痴辩颈颁丑别苍信】诲补颈办补辞8.肠辞尘
?

Gnu

  • 1. GNU AutoTools 介绍 Automake, Autoconf and Libtool 黄 颂 2004-10-09
  • 2. GNU Package 的典型安装 FAQ 0039 @ smth 下载源代码包 foo-1.0.tar.gz tar xvzf foo-1.0.tar.gz cd foo-1.0 ./configure make (su) make install 问题 1 :配置脚本 configure 是怎么生成的? 问题 2 : configure 脚本怎么知道该如何生成 Makefile 幕后英雄—— GNU Auto Tools : autoconf, automake, libtool, autoscan, autoheader……
  • 3. Makefile’s way to develop 三元组 (Target, Dependency, Command) Target : Dep1 Dep2 <TAB>Cmd1 <TAB>Cmd2 [Blank Line] .s1 .s2 : <TAB>Cmd1 $(var), $<, $@ ……
  • 4. Makefile’s Big Trouble? GNU 的 Makefile 规范相当复杂,随着项目复杂性的增加,要写出一个正确而高效的 Makefile 相当困难,对新手而言更是如此。 越是复杂的软件越有可能有自己独特的 build 方法,怎么办?每次都重新学习?! 不同的类 Unix 操作系统之间存在着差异,移植性如何保证?需要大量手工编写的脚本和条件编译。
  • 5. All in One Solution? GNU Auto Tools 是上个世纪 90 年代开始发展起来的一系列辅助开发、打安装包的自动化工具。 各种工具分别开发,但是协同工作的很好。比如 autoconf, automake, libtool 等等。 但是,连开发者自己也承认,这套工具虽然好用,但是学习曲线很陡峭。 困难在于:一套新的思路和习惯,一套自定义的宏和规则,使用者的交流 ?
  • 6. Hello World – Step by Step 1. hello.c #include <stdio.h> int main() { printf(“Hello World!\n”); return 0; } 2. Makefile.am bin_PROGRAMS = hello hello_SOURCES = hello.c 3. configure.in AC_INIT(hello.c) AM_INIT_AUTOMAKE(hello, 0.1) AC_PROG_CC AC_OUTPUT(Makefile) 4. aclocal 5. autoconf 6. automake --add-missing --foreign 7. ./configure 8. make (make install 安装, make dist 产生安装包 )
  • 7. Hello World! 演示 —— 如何杀鸡用牛刀
  • 8. 来龙去脉 autoscan configure.scan configure.in Makefile.am Makefile.in Makefile automake edit aclocal.m4 aclocal configure autoconf
  • 9. configure.in(1) 是 configure 脚本的输入文件,为了解决在不同 unix 变种之间移植程序的问题:库名可能不同,应用程序名可能不同,结构和常量的定义可能不同…… configure 脚本完成 autoconf 与 automake 的初始化工作,为不同的平台定义相应的宏,检测并指定适当的程序名、库名、结构和常量名等等,指定要为哪些目录输出 Makefile 文件。总之,为编译程序做好一切准备工作。
  • 10. configure.in(2) configure.in 的八股文 基本初始化部分:包括 AC_INIT ( 必须第一个出现 ), AM_INIT_AUTOMAKE( 程序包名,版本号 ), AC_CONFIG_HEADER 可选宏:如 AC_ARG_ENABLE 检测某些程序的存在性 检查程序用到的库
  • 11. configure.in(3) 检查某些头文件是否存在。 检查 Typedefs and structures 。 检查 Functions 。 指定在哪些目录输出 Makefile 。 Seems troublesome, mmm? Don’t worry, autoscan will do most of the work for you.
  • 12. Makefile.am(1) 一种比 Makefile 更高层次的规则。只指定要生成什么目标,它由什么源文件生成,要安装到什么目录。 Just simple and stupid! ? 可执行文件: bin_PROGRAMS = foo foo_SOURCES = foo1.c foo1.h foo2.c foo_LDADD = foo3.o -lm foo4.a foo_LDFLAGS = -L<lib_path> foo_DEPENDENCIES =
  • 13. Makefile.am(2) 对静态库: lib_LIBRARIES = libfoo.a foo_a_SOURCES = foo_a_LDADD = foo_a_LIBADD = foo_a_LDFLAGS = 只在 make 时做静态连接用,不安装的库: noinst_LIBRARIES = libfoo.a …… 对头文件: include_HEADERS = foo.h 对数据文件: data_DATA = data1 data2
  • 14. Makefile.am(3) 全局变量 ( 对所有目标都适用 ) INCLUDES = -I/dir1 -I/dir2 LDFLAGS = -L/dir1 -L/dir2 LDADD = foo.o foo.a -lfoo EXTRA_DIST = file1 file2 源程序和一些默认的文件自动打入 .tar.gz 包,其它文件若要进入 .tar.gz 包可以用这种办法,比如配置文件 , 数据文件等等 。 SUBDIRS = dir1 dir2 在处理本目录之前要递归处理哪些子目录
  • 15. Makefile.am(4) 标准安装路径 $(prefix) = /usr/local 是所有安装目录的默认前缀,可以通过 ./configure --prefix=<new_prefix> 的方法覆盖。 其它的预定义目录如: bindir = $(prefix)/bin, libdir = $(prefix)/lib, datadir = $(prefix)/share, sysconfdir = $(prefix)/etc, … 想定义一个新的安装路径?比如 config, 可定义 confdir = $(prefix)/config, 然后 conf_DATA = file1 file2 ,则 file1, file2 会作为数据文件安装到 $(prefix)/config 目录下。
  • 16. Makefile.am(5) 尽量用相对路径引用源程序的位置,以下两个变量是预定义好的: $(top_srcdir) 无论在哪个目录层次,该变量定义了包含 src 目录的目录位置,用于引用源程序; $(top_builddir) 定义了生成目标文件上最上层目录,用于引用 .o 等编译出来的目标文件。 ……
  • 17. configure’s Gifts configure 脚本生成的 Makefile 中已经带了很多常用的目标如: check, all, install, uninstall, clean, dist, distcheck, distclean, tags, maintainerclean. If configure or make did it, make distclean undoes it. If make did it, make clean undoes it. If make install did it, make uninstall undoes it. If you did it, make maintainer-clean undoes it.
  • 19. libtool 介绍 生成各种程序库的方便工具。 提供一个统一的接口,程序员不用关心各种烦人的底层细节:不同的平台的库可能要求不同的后缀,不同平台对库的安装方法不同,有些平台不支持动态库等等。 生成高层次的库,称为 libtool library ,后缀是 .la 。用它连接时,默认产生动态连接库,也可以用 -static 参数指定生成静态连接库。 既可单独使用又可与 automake 和 autoconf 一起使用更加强大、方便。
  • 20. 使用 libtool 在 configure.in 文件中加上 AC_PROG_LIBTOOL 宏,如果原来有 AC_PROG_RANLIB 宏,删去它。 在 Makefile.am 文件中: lib_LTLIBRARIES = libshell.la libshell_la_SOURCES = object.c subr.c symbol.c 与原来的写法非常相似! .la 库只能连入 .lo( 使用 libtool 生成的目标文件 ) libshell_la_LDADD = xmalloc.lo @LTLIBOBJS@ 传入库的版本号: libshell_la_LDFLAGS = -version-info 1:0:1 与其它目标文件连接时用 LDFLAGS 指定连接的方式 ( 默认是动态方式): -static, --all-static 指定静态连接。
  • 21. 小结 Autoconf :根据用户提供的 configure.in 文件,生成一个名为 configure 的脚本。该脚本可以搜集有关移植性的平台相关信息,这些信息被用来生成 Makefiles ,配置头文件和其它平台相关的文件。 Automake :根据用户提供的一个高层次的生成规则 Makefile.am ,生成 Makefile 文件的模板 Makefile.in 。 Automake 生成的 Makefiles 符合 GNU 的 Makefile 标准,用户无需再手工编写 Makefile 文件。 Libtool :使得生成内存位置无关的代码且让共享库在不同平台间移成为可能。它可以不依赖 autoconf 和 automake 单独运行,另一方面, automake 和 libtool 可以无缝地集成使用。
  • 22. References ToolsManual: http://www.amath.washington.edu/~lf/tutorials/autoconf/ AutoBook: http://sources.redhat.com/autobook/ info & man GNU Projects ( 学习其他人的技巧 )