configure.*和Makefile.*之间的关系
现在很多项目都在使用GUI编译器,Kdevelop\Eclipse等等,诚然它给我们提供了极大地便利,但我们仍需要简单了解编译的过程。本文旨在简单叙述由源码(*.cpp & *.h)经过编译得到可执行文件的过程,以及对生成的中间文件做一个简单的讲解,后面给出一个example。
相关tips & explanations: |
1. autoscan:扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。 过程:your source files --> [autoscan*] --> [configure.scan] --> configure.ac |
2. aclocal:根据已经安装的宏,用户定义宏和acinclude.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件aclocal.m4中。 aclocal是一个perl脚本程序,它的定义是:"aclocal - create aclocal.m4 by scanning configure.ac" |
3. automake:automake将Makefile.am中定义的结构建立Makefile.in。 然后configure脚本将生成的Makefile.in文件转换 为Makefile。如果在configure.ac中定义了一些特殊的宏,比如AC_PROG_LIBTOOL,它会调用libtoolize,否则它 会自己产生config.guess和config.sub |
4. autoconf:将configure.ac中的宏展开,生成configure脚本。这个过程可能要用到aclocal.m4中定义的宏。 |
5. ./configure的过程 |
6. make过程 [autoconfig.h]—. |
Never mind, That's not a problem~, there is nothing to be afraid of, cause the following example I provided will show you the guide. perhaps you should type the commands one by one for better understanding. |
Example: |
在/home/panda/目录下vi一个hello.cpp文件(当然,你的[*.cpp&*.h]都可以放在这里,但必须保证没有语法上的错误),并complie它: >>>>cd /home/panda/hello/ >>>>vi hello.cpp/*编写源文件hello.cpp*/ |
[CODE] #include<iostream> using namespace std; int main() { cout<<"Hello,RoboCup."<<endl; return 0; } [/CODE] |
>>>>autoscan >>>>mv configure.scan configure.in >>>>vi configure.in |
/*已经生成了configure.scan,autoscan.log*/ /*将configure.scan 修改为 configure.in,最后修改的内容如下*/ |
[CODE] #-*- Autoconf -*- # Process this file with autoconf to produce a configure script. |
AC_PREREQ(2.59) AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) AC_CONFIG_SRCDIR([hello.cpp]) #AC_CONFIG_HEADER([config.h]) AM_INIT_AUTOMAKE(hello, 1.0) # Checks for programs. AC_PROG_CC |
# Checks for libraries. |
# Checks for header files. |
# Checks for typedefs, structures, and compiler characteristics. |
# Checks for library functions. AC_OUTPUT(Makefile) [/CODE] |
>>>>aclocal/*生成 aclocal.m4 和 autom4te.cache (生成aclocal.m4的过程中涉及到configure.in)*/ >>>>ls >>>> aclocal.m4 autom4te.cache autoscan.log configure.in hello.cpp >>>>antoconf/*生成 configure (根据 configure.in, 和 aclocal.m4)*/ >>>>ls >>>>aclocal.m4 autom4te.cache autoscan.log configure configure.in hello.cpp >>>>vi Makefile.am/*编写Makefile.am*/ |
>>>>vi Makefile.am |
/*编写Makefile.am*/ |
[CODE] AUTOMAKE_OPTIONS= foreign bin_PROGRAMS= hello hello_SOURCES= hello.cpp [/CODE] |
>>>>automake >>>>automake --add-missing/*生成 Makefile.in, depcomp, install-sh, 和 missing (根据 Makefile.am, 和 aclocal.m4)*/ >>>>ls >>>>aclocal.m4 autom4te.cache autoscan.log configure configure.in depcomp hello.cpp install-sh Makefile.am Makefile.in missing >>>>configure/*Makefile, config.log, 和 config.status*/ /*红色表示在终端中输入的命令,斜体表示源码*/ |
至此大功告成。 |
现在看不明白,或者不是很清楚都没有关系,只做了解就好,可以将本文保留下来,随着你们学习的深入,等到时机成熟的时候再作参考,便会对Linux下C++的编译过程会理解的更加透彻。 |
Good Luck! |
文档下载链接:http://download.csdn.net/detail/klcf0220/7703221
configure.*和Makefile.*之间的关系的更多相关文章
- Kbuild、Kconfig、make menuconfig、.config、Makefile之间的关系
今天突发奇想,想在这里分享下比喻分析Kbuild ---->去饭店吃饭的过程. 1.Kconfig --->饭店的菜单 2.条件编译选项--->菜单中的每一盘菜,可以选择这个菜的 ...
- 关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结
http://blog.csai.cn/user1/265/archives/2005/2465.html 一.关于gcc.glibc和binutils模块之间的关系 1.gcc(gnu collec ...
- 【转】关于gcc、glibc和binutils模块之间的关系
原文网址:http://www.mike.org.cn/articles/linux-about-gcc-glibc-and-binutils-the-relationship-between-mod ...
- .NET Core与.NET Framework、Mono之间的关系
随着微软的.NET开源的推进,现在在.NET的实现上有了三个.NET Framework,Mono和.NET Core.经常被问起Mono的稳定性怎么样,后续Mono的前景如何,要回答这个问题就需要搞 ...
- .NET Core 和 .NET Framework 之间的关系
引用一段描述:Understanding the relationship between .NET Core and the .NET Framework. .NET Core and the .N ...
- 9.Configure One-to-One(配置一对一关系)【Code-First系列】
现在,开始学习怎么配置一对一的关系,众所周知,一对一的关系是:一个表中的主键,在另外一个表中,同时是主键和外键[实际上是一对零或者一对一]. 请注意:一对一的关系,在MS SQL Server中,技术 ...
- 实体之间的关系【Entity Relationships】(EF基础系列篇9)
Here, you will learn how entity framework manages the relationships between entities. Entity framewo ...
- php CGI、Fastcgi、PHP-FPM的详细介绍与之间的关系
以下PHP CGI.Fastcgi.PHP-FPM的一些信息归纳和汇总----->详细介绍与之间的关系 一:CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的 web ...
- [转] valuestack,stackContext,ActionContext.之间的关系
三者之间的关系如下图所示: ActionContext 一次Action调用都会创建一个ActionContext 调用:ActionContext context = ActionContext ...
随机推荐
- npm scripts 脚本基础指南
什么是npm脚本? npm 允许在package.json文件里面,使用scripts字段定义脚本命令. 初始化package.json -> npm init -> 经历一系列的问答即可 ...
- 【四】Ribbon负载均衡
1.概述1.1.是什么 Spring Cloud Ribbon 是基于Netflix Ribbon实现的一套客户端负载均衡的工具. 简单的说, Ribbon是Netflix发布的开源项目,主要功能是提 ...
- url 组成部分
NSURL其实就是我们在浏览器上看到的网站地址,这不就是一个字符串么,为什么还要在写一个NSURL呢,主要是因为网站地址的字符串都比较复杂,包括很多请求参数,这样在请求过程中需要解析出来每个部门,所以 ...
- asp.net上传图片,上传图片
想必很多人工作中经常需要实现上传图片的功能. 先引用此插件 http://files.cnblogs.com/files/hmYao/jquery-form.js. 前台代码 <form dat ...
- pyaudio
安装: 下载whl文件:https://github.com/intxcc/pyaudio_portaudio/releases 切换到whl文件目录,直接用pip安装 pip instal ...
- [C++]Linux之虚拟文件系统[/proc]中关于CPU/内存/网络/内核等的一些概要性说明
声明:如需引用或者摘抄本博文源码或者其文章的,请在显著处注明,来源于本博文/作者,以示尊重劳动成果,助力开源精神.也欢迎大家一起探讨,交流,以共同进步- 0.0 1.Linux虚拟文件系统 首先要明白 ...
- Linux下运行jmeter
• 我们在做测试的时候,有时候要运行很久,公司用的测试服务器一般都是linux,就可以运行在linux下面,linux下面不能像windows一样有图形化界面,那怎么运行脚本呢,就先在windows上 ...
- FTP之二
username=admin password=123 ip=192.168.14.117 port=21 参考:http://blog.csdn.net/yelove1990/article/det ...
- python web cgi
知识详解: cgi:通用网关接口,网络脚本的解析 python cgi 自带有cgi轻量级服务器,我们通过cgi命令可以开启该服务器 python2 python -m CGIHTTPServer p ...
- 2017-2018-2 20165234 实验二 《Java面向对象程序设计》实验报告
一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:刘津甫 学号:20165234 指导教师:娄嘉鹏 实验日期:2018年4月13日 实验时间:15:35 - 17:15 实验 ...