0

0

如何编译源码软件包 configure/make流程

P粉602998670

P粉602998670

发布时间:2025-08-12 10:11:01

|

621人浏览过

|

来源于php中文网

原创

编译源码软件包的流程为:一、安装编译环境,如ubuntu下使用apt install build-essential,centos下使用yum groupinstall "development tools";二、解压源码包并进入目录,命令为tar -xzf package-name.tar.gz;三、运行./configure检测系统环境并生成makefile,可指定--prefix、--enable-feature等选项;四、执行make编译源码,可使用make -j$(nproc)加速;五、运行sudo make install将文件安装到指定路径;六、可选make clean或make distclean清理,部分软件支持sudo make uninstall卸载;七、若无configure脚本需运行./autogen.sh生成,cmake项目则使用cmake ..代替configure。整个过程需注意依赖库和权限问题,成功的关键是正确处理configure输出的错误信息。

如何编译源码软件包 configure/make流程

编译源码软件包是 Linux 或类 Unix 系统中安装软件的常见方式,尤其当你需要自定义配置、使用最新版本或系统包管理器未提供所需软件时。最常见的编译流程是

./configure && make && make install
。下面详细介绍这一流程的每一步及其原理和注意事项。


一、准备工作:安装编译环境

在开始之前,确保系统已安装必要的编译工具和依赖库。以常见的 Linux 发行版为例:

# Ubuntu/Debian
sudo apt update
sudo apt install build-essential autoconf automake libtool

# CentOS/RHEL/Fedora
sudo yum groupinstall "Development Tools"    # CentOS 7
sudo dnf groupinstall "Development Tools"   # Fedora/CentOS 8+

此外,还需根据具体软件包安装其依赖的开发库(如 OpenSSL、zlib、libcurl 等),否则

configure
阶段会报错。


二、解压源码包

通常源码包是

.tar.gz
.tar.xz
格式:

tar -xzf package-name.tar.gz
cd package-name/

进入解压后的目录,你会看到

configure
脚本(或
configure.ac
/
configure.in
文件,说明需要先生成 configure)。


三、运行
./configure
:配置编译选项

configure
是一个由 Autoconf 生成的 shell 脚本,用于检测系统环境,生成 Makefile。

常用命令:

./configure

常见自定义选项:

  • --prefix=/usr/local
    :指定安装路径(默认通常是
    /usr/local
  • --enable-feature
    :启用某项功能
  • --disable-feature
    :禁用某项功能
  • --with-library
    :指定依赖库路径
  • --without-library
    :不使用某库

示例:

./configure --prefix=/opt/myapp --enable-shared --disable-static

configure 阶段做了什么?

  1. 检查编译器(gcc/clang)是否存在
  2. 检查系统头文件和库是否齐全
  3. 检测系统架构和特性(如是否支持 IPv6、线程等)
  4. 根据检测结果生成
    Makefile
    和配置头文件(如
    config.h
⚠️ 如果 configure 失败,查看输出中的错误信息,通常是缺少依赖库。根据提示安装对应 -dev 或 -devel 包。

四、运行
make
:编译源码

make
会根据
Makefile
中的规则编译源代码。

make

可选加速编译:

make -j$(nproc)  # 使用 CPU 所有核心并行编译,加快速度

编译过程做了什么?

  1. 调用编译器(如 gcc)将
    .c
    文件编译为
    .o
    目标文件
  2. 链接目标文件和依赖库,生成可执行文件或库文件
  3. 可能还会生成文档、脚本等辅助文件

✅ 成功后你会在源码目录看到生成的二进制文件(如

src/myprogram
)。


五、运行
make install
:安装软件

将编译好的文件复制到系统指定位置(由

--prefix
决定):

PHP Apache和MySQL 网页开发初步
PHP Apache和MySQL 网页开发初步

本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。

下载
sudo make install

注意:

make install
通常需要 root 权限,因为它会写入
/usr/local
等系统目录。

安装做了什么?

  • 将可执行文件复制到
    bin/
  • 库文件复制到
    lib/
  • 头文件复制到
    include/
  • 配置文件复制到
    share/
    etc/

六、可选:清理和卸载

清理编译产物:

make clean        # 删除编译生成的文件,保留 Makefile
make distclean    # 更彻底,删除 configure 生成的文件(推荐重新配置前使用)

卸载软件:

如果软件支持,可用:

sudo make uninstall

⚠️ 并非所有软件都提供

uninstall
目标,建议使用
checkinstall
或记录安装文件以便后续管理。


七、特殊情况处理

1. 没有
configure
脚本?

如果只有

configure.ac
autogen.sh
,需要先生成
configure

./autogen.sh      # 或
autoreconf -i

这需要安装

autoconf
automake
libtool
等工具。

2. CMake 项目?

有些项目使用 CMake 而非 Autotools:

mkdir build && cd build
cmake ..
make
sudo make install

流程类似,但工具链不同。


总结流程

tar -xzf software.tar.gz
cd software/
./configure --prefix=/usr/local --enable-feature
make -j$(nproc)
sudo make install

基本上就这些。关键是看懂

configure
的输出,及时解决依赖问题。虽然过程看似复杂,但一旦掌握,就能灵活控制软件的安装行为。

不复杂,但容易忽略依赖和权限问题。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

482

2023.08.10

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

704

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

573

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

546

2023.07.20

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

297

2023.07.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号