当前位置: 首页 > news >正文

编译方式汇总:Makefile\configure\autogen.sh\configure.ac、Makefile.am文件

一、前言

文章目的:针对各种开源项目,由于部分项目文档写的不够详细,(或者是我太菜了),没有进行详细的介绍怎么编译该项目,导致花费过多时间在查找如何编译该项目上。因此该篇文章针对目前遇到的编译项目问题进行汇总。
文章参考:gpt
注:目前遇到的编译问题更多是嵌入式的交叉编译上,如果有本文章没提及的编译方式,也可以发项目连接到评论,我会抽空补充。

目录

一、前言

二、Makefile

2.1 【what】什么是Makefile

2.2 【how】包含Makefile的项目如何编译

三、configure

3.1 【what】什么是configure

3.2【how】包含configure的项目如何编译

3.3 configure支持的配置项

四、autogen.sh

4.1 什么是autogen.sh

4.2 包含autogen.sh的项目如何编译

五、configure.ac、Makefile.am

5.1 什么是configure.ac、Makefile.am

5.2 包含configure.ac、Makefile.am文件的项目如何编译


二、Makefile

2.1 【what】什么是Makefile

Makefile是一种文本文件,用于告诉make(一个Linux/Unix工具)如何编译和链接源代码文件以生成可执行文件。Makefile通常包括编译选项、源文件列表、目标文件、依赖关系和生成可执行文件的命令等信息。它是自动化构建和编译程序的基础,并且通常是大型软件项目的必备组成部分。

2.2 【how】包含Makefile的项目如何编译

针对项目中存在Makefile文件,只需要检查Makefile中工具链的配置,平台的配置,需要链接库的库和头文件路径是否正确即可。
编译指令:
make / make -jN

三、configure

3.1 【what】什么是configure

configure是一个用于自动生成Makefile的脚本,它通常是由autoconf工具自动生成的。当项目的源代码需要在不同的操作系统或不同的硬件平台上编译时,需要根据目标平台的特点进行适当的调整和优化,因此就需要使用configure来检测目标平台的环境和特性,并生成相应的Makefile。通过执行./configure命令,会根据系统环境自动配置项目的编译选项,并生成Makefile文件,从而方便进行项目的编译和安装。    

3.2【how】包含configure的项目如何编译

针对项目中只存在configure文件的,可以通过命令行参数配置,最终生成Makefile文件
编译指令
./configure --host=...
make

3.3 configure支持的配置项

不同项目支持的配置项不同可以通过下面的指令进行查看
./configure --help

  下面是motion项目,生成的configure,支持的配置项列表

~/git_code/motion$ ./configure --help
`configure' configures motion 4.5.1+git20230416-c28d41b to adapt to many kinds of sy                                                                                                                           stems.Usage: ./configure [OPTION]... [VAR=VALUE]...To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.Defaults for the options are specified in brackets.Configuration:-h, --help              display this help and exit--help=short        display options specific to this package--help=recursive    display the short help of all the included packages-V, --version           display version information and exit-q, --quiet, --silent   do not print `checking ...' messages--cache-file=FILE   cache test results in FILE [disabled]-C, --config-cache      alias for `--cache-file=config.cache'-n, --no-create         do not create output files--srcdir=DIR        find the sources in DIR [configure dir or `..']Installation directories:--prefix=PREFIX         install architecture-independent files in PREFIX[/usr/local]--exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX[PREFIX]By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.For better control, use the options below.Fine tuning of the installation directories:--bindir=DIR            user executables [EPREFIX/bin]--sbindir=DIR           system admin executables [EPREFIX/sbin]--libexecdir=DIR        program executables [EPREFIX/libexec]--sysconfdir=DIR        read-only single-machine data [PREFIX/etc]--sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]--localstatedir=DIR     modifiable single-machine data [PREFIX/var]--runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]--libdir=DIR            object code libraries [EPREFIX/lib]--includedir=DIR        C header files [PREFIX/include]--oldincludedir=DIR     C header files for non-gcc [/usr/include]--datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]--datadir=DIR           read-only architecture-independent data [DATAROOTDIR]--infodir=DIR           info documentation [DATAROOTDIR/info]--localedir=DIR         locale-dependent data [DATAROOTDIR/locale]--mandir=DIR            man documentation [DATAROOTDIR/man]--docdir=DIR            documentation root [DATAROOTDIR/doc/motion]--htmldir=DIR           html documentation [DOCDIR]--dvidir=DIR            dvi documentation [DOCDIR]--pdfdir=DIR            pdf documentation [DOCDIR]--psdir=DIR             ps documentation [DOCDIR]Program names:--program-prefix=PREFIX            prepend PREFIX to installed program names--program-suffix=SUFFIX            append SUFFIX to installed program names--program-transform-name=PROGRAM   run sed PROGRAM on installed program namesSystem types:--build=BUILD     configure for building on BUILD [guessed]--host=HOST       cross-compile to build programs to run on HOST [BUILD]Optional Features:--disable-option-checking  ignore unrecognized --enable/--with options--disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)--enable-FEATURE[=ARG]  include FEATURE [ARG=yes]--enable-silent-rules   less verbose build output (undo: "make V=1")--disable-silent-rules  verbose build output (undo: "make V=0")--disable-maintainer-modedisable make rules and dependencies not useful (andsometimes confusing) to the casual installer--enable-dependency-trackingdo not reject slow dependency extractors--disable-dependency-trackingspeeds up one-time build--disable-nls           do not use Native Language Support--disable-rpath         do not hardcode runtime library pathsOptional Packages:--with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]--without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)--with-gnu-ld           assume the C compiler uses GNU ld [default=no]--with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib--without-libiconv-prefix     don't search for libiconv in includedir and libdir--with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib--without-libintl-prefix     don't search for libintl in includedir and libdir--without-bktr          Disable bktr devices--without-v4l2          Disable V4L2 devices--with-webp             Compile with Webp image support--with-mmal=DIR         Compile with RasperryPi mmal camera support--with-ffmpeg=DIR       Build with FFMPEG support--with-mariadb=DIR      Build with MariaDB support--with-mysql=DIR        Build with MySQL support--with-pgsql=DIR        Build with PostgreSQL support--without-sqlite3       Disable sqlite3 support.--without-optimizecpu   Exclude autodetecting platform and cpu type. Thiswill disable the compilation of gcc optimizing codeby platform and cpu.--with-developer-flags  Causes practically all of the possible gcc warningflags to be set. This may produce a large amount ofwarnings.--with-prototype-flags  Causes practically all of the possible gcc warningflags to be set except missing prototypes.Some influential environment variables:CC          C compiler commandCFLAGS      C compiler flagsLDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in anonstandard directory <lib dir>LIBS        libraries to pass to the linker, e.g. -l<library>CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> ifyou have headers in a nonstandard directory <include dir>CXX         C++ compiler commandCXXFLAGS    C++ compiler flagsCPP         C preprocessorKILL        the 'kill' program to use to send signals to motionUse these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

四、autogen.sh

4.1 什么是autogen.sh

autogen.sh是一个脚本文件,通常用于生成configure脚本和Makefile。在许多开源项目中,开发者使用autogen.sh来简化项目的构建过程,特别是当项目使用了autoconf、automake和libtool等自动化工具时。
该脚本的作用是使用autoconf、automake和libtoolize等工具生成configure脚本、Makefile.in文件和其他必要的文件。autogen.sh脚本还负责检查必要的依赖项,例如特定版本的autoconf和automake等。
使用autogen.sh脚本的好处是可以使整个构建过程更加自动化和简单,开发人员只需运行一个脚本即可生成必要的构建文件。

4.2 包含autogen.sh的项目如何编译

针对项目中只存在autogen.sh脚本文件的,该脚本会自动检查系统环境和依赖库是否满足项目要求,并生成 configue 文件.
编译指令:
./autogen.sh
./configure --host=....  #指定
make

五、configure.ac、Makefile.am

5.1 什么是configure.ac、Makefile.am

configure.ac和Makefile.am是Autoconf和Automake工具的输入文件。它们通常与configure和Makefile.in文件一起使用,这些文件是Autoconf和Automake工具生成的。在GNU构建系统中,这些工具可以自动化地生成与目标平台和操作系统兼容的Makefile文件和可执行文件。
configure.ac文件是Autoconf的输入文件,其中包含检查系统的程序。
Makefile.am文件是Automake的输入文件,其中包含Makefile的规则。它使用AUTOMAKE_OPTIONS、AM_INIT_AUTOMAKE等宏来定义Makefile的规则。此文件通常包含文件的列表、目标和依赖项以及要执行的命令。
configure和Makefile.in文件由Autoconf和Automake工具生成,并根据目标平台和操作系统生成符合标准的Makefile文件和可执行文件。configure文件通常包含源代码的配置选项,而Makefile.in文件包含Makefile的规则。configure和Makefile.in文件的生成过程是通过运行./configure脚本完成的,该脚本将根据系统环境和用户定义的选项生成符合目标平台和操作系统的Makefile文件和可执行文件。

5.2 包含configure.ac、Makefile.am文件的项目如何编译

针对项目中只存在configure.ac、Makefile.am文件,可以根据下面的指令一步步生成对应的Makefile
编译指令:
autoreconf -i
./configure
make

相关文章:

编译方式汇总:Makefile\configure\autogen.sh\configure.ac、Makefile.am文件

一、前言 文章目的&#xff1a;针对各种开源项目&#xff0c;由于部分项目文档写的不够详细&#xff0c;&#xff08;或者是我太菜了&#xff09;&#xff0c;没有进行详细的介绍怎么编译该项目&#xff0c;导致花费过多时间在查找如何编译该项目上。因此该篇文章针对目前遇到的…...

explicit关键字

explicit关键字只能用来修饰构造函数。使用explicit可以禁止编译器自动调用拷贝初始化&#xff0c;还可以禁止编译器对拷贝函数的参数进行隐式转换。 那么什么是隐式转换呢&#xff1f; 类 命名 参数&#xff1b; //有参构造类 命名 命名对象&#xff1b; //拷贝构造&#x…...

[优雅的面试] 你了解python的对象吗

前情提要&#xff1a;小编面试&#xff0c;结果面试官着急去吃饭~又约了这次来面&#xff0c;不晓得又会问什么问题呢&#xff1f; 面试官大佬&#xff1a;小伙子来的挺准时的(赞赏的表情~)&#xff0c;今天咱们接着聊哈&#xff0c;小伙子&#xff0c;你有对象了没&#xff1f…...

【hello Linux】线程概念

目录 1. 线程概念的铺设 2. Linux线程概念 2.1 什么是线程 2.2 线程的优点 2.3 线程的缺点 2.4 线程异常 2.5 线程用途 3. Linux进程VS线程 4. Linux线程控制 4.1 POSIX线程库 4.2 创建线程 4.3 进程ID和线程ID 4.4 线程终止 4.5 线程等待 4.6 分离线程 Linux&#x1f337; 1…...

JavaWeb07(MVC应用01[家居商城]连接数据库)

目录 一.什么是MVC设计模式&#xff1f; 1.2 MVC设计模式有什么优点&#xff1f; 二.MVC运用&#xff08;家居商城&#xff09; 2.1 实现登录 2.2 绑定轮播【随机三个商品】 2.2.1 效果预览 index.jsp 2.3 绑定最新上架&热门家居 2.3.1 效果预览 2.3.2 代码实现 数据…...

如何使用电商API接口API接口如何应用

使用API接口 API&#xff08;应用程序接口&#xff09;是现代软件开发中必不可少的一部分&#xff0c;它通常允许软件与其他软件或服务进行交互。使用API可以大大提高软件的灵活性和可扩展性&#xff0c;并允许您轻松添加新的功能和服务&#xff0c;因此&#xff0c;API接口的…...

【移动端网页布局】流式布局案例 ⑥ ( 多排按钮导航栏 | 设置浮动及宽度 | 设置图片样式 | 设置文本 )

文章目录 一、多排按钮导航栏样式及核心要点1、实现效果2、总体布局设计3、设置浮动及宽度4、设置图片样式5、设置文本 二、完整代码实例1、HTML 标签结构2、CSS 样式3、展示效果 一、多排按钮导航栏样式及核心要点 1、实现效果 要实现下面的导航栏效果 ; 2、总体布局设计 该导…...

1. 先从云计算讲起

本章讲解知识点 什么是云计算&#xff1f; 为什么要用云计算&#xff1f; 物理服务器与云服务器对比 云计算服务类型 云计算部署类型 1. 什么是云计算&#xff1f; 云计算是一种通过计算机网络以服务的方式提供动态可伸缩的虚拟化资源的计算模式。按照服务层次分为IaaS、…...

ZooKeeper安装与配置集群

简介: ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;它提供了一个分布式环境中的高可用性、高性能、有序访问的数据存储&#xff0c;可以让分布式应用程…...

浅谈Mysql的RR和RC隔离级别的主要区别

MySQL默认为RR级别 首先默认RR是因为mysql为了保证在主从同步过程中数据的安全的问题&#xff08;涉及到binlog三种格式&#xff09;。 就是说两个并发事务数AB&#xff0c;A先开启事物最后提交也是最后&#xff0c;事务B开启和提交都在A内部&#xff0c;由于隔离级别不同&…...

Build生成器模式

设计模式简述 设计模式的核心在于提供了相关问题的解决方案&#xff0c;使得人们可以更加简单方便地复用成功的设计和体系结构。 生成器模式&#xff08;创建型设计模式&#xff09; 意图&#xff1a;将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以…...

C++程序设计——常见C++11新特性

一、列表初始化 1.C98中{}的初始化问题 在C98中&#xff0c;允许使用花括号{}对数组元素进行统一的列表初始化值设定&#xff0c;比如&#xff1a; 但是对于一些自定义类型&#xff0c;就无法使用这样的方式进行初始化了&#xff0c;比如&#xff1a; 就无法通过编译&#xff…...

Rust main 函数返回值类型不能是 String

是的&#xff0c;Rust 的 main 函数返回值类型不能是 String。 Rust 的 main 函数只能返回以下几种类型之一&#xff1a; ()&#xff1a;表示空类型&#xff0c;不返回任何值。i32&#xff1a;表示程序的退出码&#xff0c;通常非零值表示执行失败&#xff0c;0 表示执行成功…...

视频里的音乐怎么转换成mp3格式?

视频里的音乐怎么转换成mp3格式&#xff1f;视频里的音乐转换为mp3的原因有很多&#xff0c;主要是因为mp3格式是一种音频格式&#xff0c;文件大小较小&#xff0c;更易于存储和传输。相比之下&#xff0c;视频格式则是一种视频文件格式&#xff0c;虽然包含音频&#xff0c;但…...

CSS3 grid网格布局

文章目录 CSS3 grid网格布局概述grid属性说明使用grid-template-rows & grid-template-columns 定义行高和列宽grid-auto-flow 定义项目的排列顺序grid-auto-rows & grid-auto-columns 定义多余网格的行高和列宽row-gap & column-gap 设置行间距和列间距gap 简写形…...

SPSS如何进行均值比较和T检验之案例实训?

文章目录 0.引言1.均值过程2.单样本T检验3.独立样本T检验4.成对样本T检验 0.引言 因科研等多场景需要进行数据统计分析&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对均值…...

Packet Tracer - 配置交换机端口安全

Packet Tracer - 配置交换机端口安全 地址分配表 设备 接口 IP 地址 子网掩码 S1 VLAN 1 10.10.10.2 255.255.255.0 PC1 NIC 10.10.10.10 255.255.255.0 PC2 NIC 10.10.10.11 255.255.255.0 非法笔记本电脑 NIC 10.10.10.12 255.255.255.0 目标 第 1 部…...

一图看懂 aiohttp 模块:基于 asyncio 的异步HTTP网络库, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 aiohttp 模块&#xff1a;基于 asyncio 的异步HTTP网络库, 资料整理笔记&#xff08;大全&#xff09; 摘要模块图类关系图模块全展开【aiohttp】统计常量模块1 aiohttp.hd…...

Linux + 香橙派 + V4L2 + http 实现远程监控摄像头在网页端显示

项目场景&#xff1a; 项目需求&#xff0c;需要做一个基于边缘端的人脸识别远程监控摄像头并在网页前端展示 &#xff0c;这里采用国产香橙派作为边缘计算终端&#xff0c;安装ubuntu系统&#xff0c;系统中采用v4l2接口对摄像头进行获取&#xff0c;当客户端通过网页进行请求…...

《编码——隐匿在计算机软硬件背后的语言》精炼——第15-16章(十六进制,RAM)

“学习如春起之苗&#xff0c;不见其增&#xff0c;日有所长。” —— 宋代朱熹 文章目录 十六进制十六进制概述十六进制表字节到十六进制 存储器特定的读功能特定的写功能RAM大型RAM阵列 十六进制 十六进制概述 十六进制是一种适用于计算机的进制法。在十进制中&#xff0c;…...

leetcode.1376 通知所有员工所需的时间 - bfs/dfs + 树

1376. 通知所有员工所需的时间 目录 一、bfs 二、dfs 题目&#xff1a; 公司里有 n 名员工&#xff0c;每个员工的 ID 都是独一无二的&#xff0c;编号从 0 到 n - 1。公司的总负责人通过 headID 进行标识。在 manager 数组中&#xff0c;每个员工都有一个直属负责人&#x…...

AtCoder Beginner Contest 300——A-G题讲解

蒟蒻来讲题&#xff0c;还望大家喜。若哪有问题&#xff0c;大家尽可提&#xff01; Hello, 大家好哇&#xff01;本初中生蒟蒻讲解一下AtCoder Beginner Contest 300这场比赛的A-G题&#xff01; A - N-choice question 原题 Problem Statement Given integers A A A and…...

Go:值与指针

1. 计算机中的值 在百万年的演化历史中&#xff0c;人类对事物的属性进行了抽象&#xff0c;有了数量、精度、信息等概念的表示&#xff0c;对应的我们称之为整数、小数、文本文字等。计算机出现后&#xff0c;我们使用计算机对真实世界的问题进行建模&#xff0c;通过计算机的…...

【Linux】进程学习(2)---理解进程操作

文章目录 查看进程通过系统目录查看通过ps命令查看 通过系统调用获取进程标识符通过系统调用创建进程初识fork函数fork函数的返回值 进程状态阻塞与运行状态Linux内核源码中的进程状态运行状态-R浅度睡眠状态-S深度睡眠状态-D暂停状态-T僵尸状态-Z死亡状态-X 查看进程 通过系统…...

基于springcloud实现的医院信息系统

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 医疗信息就诊系统&#xff0c;系统主要功能按照数据流量、流向及处理过程分为临床诊疗、药品管理、财务管理、患者管理。诊疗活动由各工作站配合完成&#xff0c;并将临床信息进行整理、处理、汇总、统计、分析等。本系统包括以…...

设计模式-创建型模式-(工厂、简单工厂、抽象工厂)

一、简单工厂模式 上代码 public class FoodFactory {public static Food makeFood(String name) {if (name.equals("noodle")) {Food noodle new LanZhouNoodle();noodle.addSpicy("more");return noodle;} else if (name.equals("chicken")…...

JAVA12新特性

JAVA12新特性 概述 2019年3月19日,java12正式发布了,总共有8个新的JEP(JDK Enhancement Proposals) JDK 12 is the open-source reference implementation of version 12 of the Java SE12 Platform as specified by by JSR 386 in the Java Community Process. JDK 12 reac…...

Nginx 静态文件、反向代理、负载均衡、缓存、SSL/TLS 加密、gzip 压缩 等等

Nginx的功能 1. 静态文件服务器2. 反向代理服务器3. 负载均衡4. 缓存5. SSL/TLS 加密6. URL 重写7. HTTP/28. WebSocket9. 反向代理缓存10. 安全限制11. gzip 压缩12. 请求限速13. 日志记录14. SSL 证书续订 Nginx 是一个高性能的开源 Web 服务器和反向代理服务器&#xff0c;它…...

Linux设备驱动模型(一)

一、sysfs文件系统 sysfs是一个虚拟文件系统&#xff0c;将内核总的设备对象的链接关系&#xff0c;以文件目录的方式表示出来&#xff0c;并提对设备提供读写接口。 二、kobject kobject是内核中对象表示的基类&#xff0c;可以认为所有的内核对象都是一个kobject kobject单…...

【Python入门篇】——Python基础语法(标识符与运算符)

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; Python入门&#xff0c;本专栏主要内容为Python的基础语法&#xff0c;Python中的选择循环语句…...

鸿兴网站建设公司/网络营销手段有哪四种

在python中&#xff0c;异常捕捉常用的方法是try…except…方法&#xff0c;其中如果在try…except方法中使用了else以及finally后&#xff0c;异常捕捉的执行逻辑会存在差异1.try/except使用&#xff0c;执行顺序def func():i 0try:i 1print(执行try中逻辑)j i / 0except E…...

网站建设第一品牌/seo代码优化

html首行缩进2字符&#xff0c;可以使用CSS属性中的【text-indent】进行设置。 设置代码如下&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html …...

汕头网站快速排名/在哪里找软件开发公司

关于Gdb的使用&#xff0c;请参考&#xff1a;http://blog.csdn.net/haoel/article/details/2879 转载于:https://www.cnblogs.com/itdev/p/6160284.html...

网站开发专业培训/百度推广怎么联系

发布时间&#xff1a;2016-06-28注意:乐谱触发有先后顺序,两个乐谱事件不能同时触发.满足触发条件后,在出自家门时会发生寻找乐谱事件. 1 音階の基礎条件:一年春17日 位置:ダンヒル家床边. 效果:树林区域跳跃蘑菇使用可能.(从小镇北部进入 ...标签&#xff1a;牧场物语攻…...

wordpress 更换模板/鹤壁搜索引擎优化

1.java.lang.Object类的说明: 1.Object类是所Java类的根父类 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 3.Object类中的功能(属性、方法)就具通用性。 属性:无 方法:equals() / toString() / getClass() /hashCode() / clone() …...

阿里云域名注册电话/seo发帖网站

redo log大量生成的诊断处理流程本文是原创文章&#xff0c;转载请注明出处&#xff1a; http://blog.csdn.net/msdnchina/article/details/41249705 1.获得归档日志暴增时段的一个归档日志&#xff1a;可以查询v$archived_log视图&#xff0c;结合completion_time列进行定位…...