Skip to content

源码编译安装

源码编译安装

image-20240419080657575

案例:mariadb编译安装

下载并解压缩源码包:

bash
tar xvf mariadb-10.2.19.tar.gz

源码编译安装mariadb:

bash
cd mariadb-10.2.19/

cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/ \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

#make && make install
make -j 8 && make install; date

TIP

提示:如果出错,执行rm -f CMakeCache.txt

FAQ

要区分源码包

带系统发型版本名称的都为二进制包,而只有软件包名称的为源码包。

image-20240419081119888

cmake的用法

bash
yum -y install  cmake

编译安装说明

本次利用cmake编译,而不是利用传统方法,cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译编译选项:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html

案例:make 和 make install的区别

image-20241230073602155

案例:重复make或make install会有不好影响吗?

作者回复: 重复make没有关系,如果目标文件存在,而且日期最新,不会覆盖。重复make install不是好习惯,它会覆盖安装位置的文件。

注意:make -j和make参数的区别

make 是一个自动化构建工具,常用于编译和构建项目。在使用 make 时,您可以通过不同的参数来控制构建过程。下面是 make -j 和不带参数的 make 的主要区别:

  1. make 命令

当您仅输入 make 命令时,它会按照 Makefile 中定义的规则顺序依次执行构建过程。这个过程是串行的,也就是说,make 会完成一个目标的构建后,才会开始下一个目标。

  1. make -j 参数

-j 参数用于并行执行多个构建任务。它允许 make 同时启动多个进程来编译和链接目标文件,从而显著加快构建速度。-j 后面可以跟一个数字,表示同时运行的最大任务数。例如,make -j4 将最多同时运行 4 个任务。如果不指定数字,make 会根据系统的 CPU 核心数来决定并行任务的数量。

关键点说明

  • 性能提升:使用 make -j 可以利用多核 CPU 的能力,缩短构建时间,特别是在大型项目中。
  • 资源消耗:并行构建会消耗更多的系统资源,因此要根据你的机器性能来选择合适的任务数量。
  • 依赖关系:尽管 make -j 可以并行执行任务,但它会根据目标之间的依赖关系,确保构建的正确性。

使用示例

bash
# 使用默认方式构建
make

# 使用4个并行任务构建
make -j4

# 使用自动核心数的并行构建
make -j

总之,make -j 是提高构建效率的有效方式,特别是在处理复杂和大型项目时。希望这些信息对您有所帮助!如果您有其他问题,欢迎继续咨询。

案例:彻底卸载源码编译安装的程序

image-20241230073254612

案例:make test

bash
make test 是什么意思?

make test 是一个在软件开发和编译过程中常用的命令,主要用于执行一系列自动化测试,以验证软件的功能和稳定性。以下是对该命令的详细解释:

  1. make 命令
  • 目的make 是一个构建工具,用于从源代码自动化地编译和构建程序。它通过读取 Makefile 文件中的指令,自动化处理编译过程。
  1. test 目标
  • 定义:在 Makefile 文件中,test 通常是一个定义好的目标,用于运行软件的测试用例。
  • 作用:执行 make test 时,make 会寻找 Makefile 中与 test 相关的指令,通常执行一些测试脚本或程序,以验证软件的各项功能是否正常。
  1. 功能
  • 验证功能make test 可以帮助开发者和用户确认软件在编译之后仍然正常运行,所有功能符合预期。
  • 自动化测试:多数现代软件项目会包含自动化测试框架,执行 make test 会运行这些自动化测试,检查代码的正确性和稳定性。
  • 发现问题:通过测试,可以在发布软件之前发现潜在的错误或缺陷,从而提高软件的质量。
  1. 注意事项
  • 可能性:并不是所有的软件包都包含 test 目标,具体取决于开发者在 Makefile 中的设计。
  • 测试时间:运行测试可能需要一些时间,具体取决于测试的数量和复杂性。
  • 输出结果:执行 make test 后,会输出测试结果,包括通过和失败的测试数量,通常会提供详细信息,以帮助用户理解测试的过程和结果。

总结

make test 是一个重要的命令,用于确保编译后的软件能够正常工作,帮助开发者在软件发布之前提高其稳定性和可靠性。通过运行自动化测试,开发团队可以更好地维护代码质量,确保满足用户需求。如果您在使用该命令时遇到任何问题,可以查看测试输出信息,以获得更多上下文来进行故障排除。

最近更新