首页 > 编程知识 正文

linux重新编译内核,autofac依赖注入的三种方式

时间:2023-05-05 05:10:23 阅读:49359 作者:1131

1、大型项目的编译流程./configuremakemake install Linux的configure/make/make install到底在做什么

1 )、/configure:

configure是Autoconf工具通常生成的脚本,用于软件安装,如当前系统是否支持要安装的软件,是否安装了软件依赖关系配置脚本最终生成makefile。

2 ) make

make是使用步骤1中获得的Makefile文件的命令。 如果只有“make”命令没有显示“目标”,则通常编译源代码。

3 )制造安装

make install表示目标运行install make命令,并将编译后的结果复制到相应的目录中。

2、使用Autoconf流程的Autoconf工具是autotools系列工具之一,运行后可以处理configure.in脚本配置文件,生成configure可执行文件。 简而言之,它用于简化makefile的创建,涉及的几个重要过程如下

使用命令aclocal将生成m4文件。 全名是macro,m后面有四个字。 m4是宏处理器,autoconf是POSIX标准的一部分,用于生成配置文件。 configure配置源程序以适应不同的操作系统平台,并根据不同的系统生成相应的脚本。automake用于生成Makefile.in文件。 简单地说,这个编译过程包含几个命令工具。 大致功能点如下。

aclocal # 产生 aclocal.m4

autoconf # 根据 configure.in 生成configure

automake --add-missing # 根据 Makefile.am生成Makefile.in

整个流程图:

具体操作过程:

从源根目录调用autoscan脚本以生成configure.scan文件。 在指定目录和苹果笔目录树中检查源文件,如果未指定目录,在当前目录和苹果笔目录树中检查。 修改【configure.ac】,利用autoconf提供的各种M4宏,配置项目所需的各种自动化探测项目,创建【自定义宏】。 为每个宏建议单独的*.m4文件。 调用aclocal以收集configure.ac中使用的非Autoconf宏。 也包括自定义宏。 调用autoheader并扫描configure.ac(configure.in )、acconfig.h (如果存在) )以生成config.h.in宏定义文件。 这里主要基于configure.AC中的特定宏)。 configure根据实际探测结果,确定这些宏是否定义automake中规定的规则和项目的目录结构。 一个或多个【Makefile.am】(Makefile.am的数量、存储位置和源代码目录结构相关。 Makefile.am主要编写编译的目标及其源代码配置。 调用automake,将每个Makefile.am转换为Makefile.in,同时生成一组满足GNU编码规范的文件。 如果指定-a选项,将自动添加缺少的文件,但有些文件必须自己添加,并且必须在运行automake之前运行touchnewsreadmeauthorschanger configure.AC 在此步骤之前,必须在项目根目录下运行libtoolize-- automake-- copy-- foolize-- automake-- copy-- foolize。调用autoconf并利用M4 完成以上步骤后,即使开发人员的工作已经完成,后续的定制也是通过开源软件用户根据需要在configure中输入不同的参数来完成的。 用户调用configure,生成Makefile,然后make make安装。需要操作的过程:

【修改configure.ac文件】添加AM_INIT_AUTOMAKE宏

AM_INIT_AUTOMAKE是automake尝试makefile时的检查工具,传递给此宏的参数是要编译的APP应用程序的名称和版本号。 这些参数是config.h中定义的包和版本的值

AC_config_headers([config.h] )。

此宏的目的是输出config.h。 这主要是包含许多宏定义#define的c头文件。 至此,很明显,输出此文件的目的是提供各种相关宏

编译链接所需的

程序

AC_PROG_CXX

AC_PROG_CC

AC_PROG_RANLIB

如果使用libtool编译,则选项如下,注意使用了libtool则需要将AC_PROG_RANLIB去掉

LT_INIT

在AC_OUTPUT上一行添加AC_CONFIG_FILES宏

添加这个宏的目的是制定Autoconf输出哪些文件,常见的文件就是Makefile文件,config.h在AC_CONFIG_HEADERS宏里面指定了,这里不需要再次指定。例如:

【编写Makefile.am文件】

三大原则:编写Makefile.am主要是完成3件事情:编译(make)、安装(make install)、打包(make dist)

1)**原则1:**每个目录一个Makefile.am文件;同时在configure.ac的AC_CONFIG_FILES宏中指定输出所有的Makefile文件,例如:

2)**原则2:**父目录需要包含子目录

3)**原则3:**Makefile.am中指明当前目录如何编译

编译安装

编译和安装的规则是绑定在一起的,通过同一条语句同时指定了编译和安装的处理方式

具体的格式为:安装目录_编译类型=编译目标

1.1:常用缺省的安装目录如下

目录Makefile.am中的变量使用方式prefix/usr/local安装目录,通过–prefix指定exec_prefix${prefix}同prefixkadkldir${exec_prefix}/kadklkadkl_编译类型libdir${exec_prefix}/liblib_编译类型includedir${prefix}/includeinclude_编译类型noinstdir无noinst_编译类型,特殊的目录,表示编译目标不安装。

自定义目录:

在根目录下的Makefile.am中添加如下内容:

configdir=${prefix}/config => 定义一个自定义的目录名称config,注意dir后缀是固定的

config_DATA=config/test.ini => 使用自定义的目录config,必须要有这句,否则目录不会创建, =号后面如果有对应的文件,安装时会将对应的文件拷贝到config目录下

1.2:编译类型

​ 常见编译类型如下,没有自定义编译类型

类型说明使用方式PROGRAMS可执行程序kadkl_PROGRAMSLIBRARIES库文件lib_LIBRARIESLTLIBRARIESlibtool库文件lib_LTLIBRARIESHEADERS头文件include_HEADERSSCRIPTS脚本文件,有可执行权限test_SCRIPTS(需要自定义test目录)DATA数据文件,无可执行权限conf_DATA(需要自定义conf目录)**1.3:编译配置**

​ 标准的编译配置

​ _SOURCES:对应gcc命令中的源代码文件

​ _LIBADD:编译链接库时需要链接的其它库,对应gcc命令中的*.a等文件

​ _LDADD:编译链接程序时需要链接的其他库,对应gcc命令中的*.a等文件

​ _LDFLAGS:链接选项,对应gcc命令中的-L, -l, -shared, -fpic等选项

​ _LIBTOOLFLAGS:libtool编译时的选项

​ **FLAGS(例如_CFLAGS/_CXXFLAGS):编译选项,对应gcc命令中的-O2, -g, -I等选项

3、实例:

源文件:hello.c

运行autoscan得到configure.scan文件,将该文件重命名为configure.ac,编辑如下:此文件的相关内容需要根据软件和系统的环境进行配置,但是AM_INIT_AUTOMAKE宏需要自己添加,它是automake所必备的宏[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

执行aclocal用于扫描configure.ac文件生成aclocal.m4,告诉autoconf如何找到新的宏

执行autoheader,会生成一个config.h.in文件

执行autoconf生成configure

编写Makefile.am文件:Automake工具会根据configure.in中的参量把Makefile.am转换成Makefile.in文件

新建NEW,AUTHONS,README,ChangeLog文件

执行automake --add-missing或者 7,8步骤可用automake -a命令自动添加文件

执行./configure ,它将makefile.in文件生成Makefile文件

最后执行make,生成了可执行文件hello

make install 安装到/usr/local/lib库中

参考资料: 大型项目使用Automake/Autoconf完成编译配置Linux中的configure,make,make installlinux 源码编译 ./configure 的配置和用法autoconf手册

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。