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]—.
                    +-----> make* ----->程序


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.*之间的关系

时间: 2024-10-08 11:18:12

configure.*和Makefile.*之间的关系的相关文章

Kbuild、Kconfig、make menuconfig、.config、Makefile之间的关系

今天突发奇想,想在这里分享下比喻分析Kbuild ---->去饭店吃饭的过程. 1.Kconfig --->饭店的菜单 2.条件编译选项--->菜单中的每一盘菜,可以选择这个菜的做法 Y ---> 在饭店吃 M ---> 打包 N ---> 不点 3.make menuconfig ---> 顾客点菜的过程 4..config --->顾客下的单 5.Makefile ---> 厨师根据顾客下的单(.config)和原材料(led_drv.c)确定如何

SessionFactory、HibernateTemplate、HibernateDaoSupport之间的关系说明

在接触HibernateTemplate之前,我们知道,在对数据库进行CRUD操作之前,需要开启session.transaction等等.在hibernate学习过程中,我们知道了,得到session之前,需要先得到SessionFactory,进而从SessionFactory里面openSession(),或者getCurrentSession(),接着开启一transaction,然后进行对数据库的操作,在操作结束后,提交事务,关闭session.当然如果session是通过getCur

深入Linux内核架构 - 内核之中数据结构之间的关系图 &amp; 设备驱动程序(转)

内核之中数据结构之间的关系图 设备驱动程序

Spring初学之bean之间的关系和bean的作用域

一.bean之间的关系 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.o

Spring学习--Bean 之间的关系

Bean 之间的关系:继承.依赖. Bean 继承: Spring 允许继承 bean 的配置 , 被继承的 bean 称为父 bean , 继承这个父 bean 的 bean 称为子 bean. 子 bean 从父 bean 中继承配置 , 包括 bean 的属性配置. 子 bean 也可以覆盖从父 bean 继承过来的配置. 父 bean 可以作为配置模板 , 也可以作为 bean 实例.若只想把父 bean 作为模板 , 可以设置 <bean> 的 abstract 属性为 true ,

Linux中的文件描述符与打开文件之间的关系

1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个新的文件,它的文件描述符会是3.POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号

WEB组件之间的关系

WEB组件之间的关系: A:重定向的特点: 1:发生客户端 2:地址栏发生变化 3:两个WEB组件不共享request的数据. 服务端的方法:response.sendRedirect(); 服务端的方法:response.sendRedirect("相对路径");   相对路径 request.getContextpath+"路径" 客户端的方法: window.location.href='URL地址' B:请求转发: request.getRequestDis

oracle动态视图v$,v_$,gv$,gv_$与x$之间的关系

前言:在oracle运维的过程中,经常会使用到一些以V$开头的动态视图,比如V$session, 有一次偶然看到有人用V_$session, 初以为别人写错了,没想到desc v_$session以后能看到和v$session一样的结构,再以后又发现以gv$开头的视图等等.趁这次在一台Linux系统上装oracle的机会,终于弄清楚了这些动态视图与相应表之间的关系.这些都是由oracle自己管理的数据结构,得从v$fixed_table入手:[[email protected] admin]$

Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系

2条评论 Unity3D 的 Mecanim 动画系统可以直接复用 3DS MAX 中制作的动画文件中的位移,这个就是通过 applyRootMotion 来达成的,我们只需要在使用 Animator 控制动画播放的同时,设置 Animator 的 applyRootMotion 字段为 True 就 OK 了. 那么怎么来利用这个特性达成我们想要的一些效果呢?这个 applyRootMotion 到底指的是啥呢? ApplyRootMotion,从字面上理解来看,是『应用根节点的运动』,听起来