本文还有配套的精品资源,点击获取
简介:CMake是一个跨平台的自动化构建系统,通过配置文件简化了项目构建过程,并能够生成适应不同操作系统和编译器环境的构建工具。版本3.28.2针对Linux系统和aarch64架构预编译,适用于64位ARM处理器。该版本包括了所有必要的可执行文件、库、模块和文档。解压后,通过简单几步即可安装并开始使用CMake来构建项目。
CMake是一个跨平台、开源的自动化构建系统,使用简单的脚本语言编写配置文件,以控制软件构建的过程。它支持多种IDE和构建环境,广泛应用于开源项目和商业软件的构建过程中。CMake能够通过命令行工具来生成本机的构建环境,如Makefile或Visual Studio解决方案。
CMake的主要特性包括: - 跨平台支持 :能够运行在多种操作系统上,如Linux、Windows、MacOS等。 - 生成本地构建环境 :能够为不同的构建系统如Makefile、Visual Studio、Xcode等生成相应的构建文件。 - 可扩展性 :支持编写自定义模块和脚本以扩展其功能。 - 命令行工具 :提供了丰富的命令行工具,方便用户进行自动化构建。 - 集成IDE :能够集成如Eclipse、Visual Studio等流行的开发环境。
CMake通过其易于使用的语法,使得开发者可以编写统一的构建脚本,同时支持复杂的项目结构和多种构建配置。它通过提供高级命令和配置选项,简化了构建流程,并允许开发者构建、测试以及打包项目,而不需要考虑平台差异。
cmake-3.28.2是CMake软件的最新稳定版本之一,针对Linux aarch64架构进行了优化和特性增强。此版本在性能、易用性、跨平台支持等方面都有所提升,例如改善了编译配置的灵活性,增加了对新的编程语言特性的支持,以及对开发者的日常构建和测试流程进行了一些改进。
CMake是一个跨平台的自动化构建系统,它使用CMakeLists.txt文件来控制编译过程,这些文件包含了项目的源文件列表、编译选项、依赖关系等信息。版本3.28.2引入了许多新功能,这对于嵌入式Linux开发者和那些需要在aarch64架构上工作的开发者来说尤为有价值。
aarch64架构是ARM架构的一个64位版本,广泛应用于高性能计算领域。cmake-3.28.2针对这一架构,提供了一系列优化:
通过对比cmake-3.28.1与cmake-3.28.2,可以发现新版本在以下方面进行了重大改进:
当考虑到升级到cmake-3.28.2时,需要进行如下准备工作:
在准备升级时,可以创建一个隔离的构建环境,使用容器技术例如Docker是一个不错的选择。在容器中安装cmake-3.28.2,并运行项目测试来验证一切功能正常。
接下来,让我们进一步了解如何下载、解压和安装cmake-3.28.2-linux-aarch64.tar.gz文件,确保我们可以在Linux aarch64系统上顺利使用它。
CMake的版本号由三个主要部分组成:主版本号、次版本号和补丁号。这些部分由点号( .
)分隔,如 3.28.2
。版本号的每部分通常有其特定的含义:
除此之外,版本号中还可能包含预发布(如 -rc
)和构建元数据(如 +
后跟一系列字符),表明预发布版本或构建信息。
通过理解版本号的组成,我们可以预测和识别版本之间的变化范围。例如, 3.28.2
比 3.28.1
有着更多的错误修复,而 3.29.0
可能引入了破坏向后兼容的API变更。
选择合适的CMake版本是项目构建和维护过程中的一个关键步骤。以下是几个选择合适版本的建议:
X.Y.Z
格式)较为合适。对于学习或实验目的,可以考虑使用最新版本。 当决定升级CMake版本时,需要进行充分的考量和准备:
cmake --version-check
选项检查。 假设当前使用的CMake版本为 3.20.0
,并且已经决定升级到 3.28.2
版本。首先,需要检查新版本的兼容性:
$ cmake --version-check 3.28.2
接着,更新CMake到目标版本:
$ wget https://github.com/Kitware/CMake/releases/download/v3.28.2/cmake-3.28.2-linux-aarch64.tar.gz
$ tar -xzf cmake-3.28.2-linux-aarch64.tar.gz
$ ./cmake-3.28.2-linux-aarch64/bin/cmake --version
cmake version 3.28.2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
然后,为项目创建新的构建目录并使用新版本CMake配置项目:
$ mkdir build-3.28.2 && cd build-3.28.2
$ cmake -DCMAKE_TOOLCHAIN_FILE= ..
最后,运行测试套件验证新版本CMake的兼容性和项目功能:
$ make && make test
| 版本号 | 发布日期 | 主要特性 | 是否稳定 | 备注 | |----------|------------|---------------------------------|----------|------------------| | 3.20.0 | 2021-07-28 | ... | 是 | | | 3.28.2 | 2023-03-30 | 增强了对跨平台编译的支持 | 是 | 推荐升级版本 |
通过上述步骤和表格,我们可以清楚地看到不同版本之间的差异,以及为何推荐升级到 3.28.2
版本。准备升级CMake时,应仔细考虑每个版本的特性、兼容性以及与项目需求的匹配程度。
在准备安装 CMake 之前,您需要确保下载的文件版本符合您的需求和系统架构。对于 aarch64 架构的 Linux 系统, cmake-3.28.2-linux-aarch64.tar.gz
文件是推荐的选择。以下是获取该文件的几个有效渠道:
CMake 官方网站: 最可靠的方式是直接从 CMake 的官方网站下载。您将能在这里找到稳定版本的 CMake,确保了文件的完整性和安全性。
Linux 发行版的软件仓库: 如果您使用的是像 Ubuntu 或 Fedora 这样的 Linux 发行版,您可以尝试使用系统的包管理器下载 CMake。例如,在 Ubuntu 上,您可以使用 apt
:
bash sudo apt-get update sudo apt-get install cmake
不过请注意,这些包可能不是最新版本的 CMake。
源代码管理系统: 您还可以从像 GitHub 这样的源代码管理系统中获取 CMake。在这里您可以下载最新的开发版本,但这些版本可能还不适合生产环境。
镜像站点: 在一些软件镜像站点上也可以找到 CMake 的预编译包。这些站点可以是您获取软件包的快速通道,但是请确保来源的可靠性。
确保下载的版本号与您需求相匹配,并检查文件的哈希值以验证下载的完整性和一致性。
下载完成之后,您需要将压缩包解压到适合的目录中。下面是在 Linux 环境下,使用命令行对 cmake-3.28.2-linux-aarch64.tar.gz
进行解压的步骤:
# 移动到下载文件所在的目录
cd ~/Downloads
# 解压文件到指定目录,例如解压到 /opt/cmake-3.28.2
sudo tar -xzvf cmake-3.28.2-linux-aarch64.tar.gz -C /opt/
# 如果您没有 root 权限,可以选择解压到当前用户的家目录下
tar -xzvf cmake-3.28.2-linux-aarch64.tar.gz
这些命令执行完毕后,解压出的文件应该位于 /opt/cmake-3.28.2
或者当前工作目录下。您可以使用 ls
命令查看是否解压成功。
安装 CMake 包含解压和配置环境变量两个主要步骤。以下是详细的操作说明:
您已经在上一节中完成了这一步骤。我们假设您已经将 cmake-3.28.2-linux-aarch64.tar.gz
解压到了 /opt/cmake-3.28.2
目录下。
为了能够在命令行中直接使用 CMake,您需要将 CMake 的 bin 目录添加到环境变量 PATH
中。执行以下步骤:
打开您的 shell 配置文件(对于 bash,是 .bashrc
;对于 zsh,是 .zshrc
):
```bash
nano ~/.bashrc
nano ~/.zshrc ```
在配置文件的末尾添加以下行:
```bash
export PATH=/opt/cmake-3.28.2/bin:$PATH ```
保存并关闭文件。然后运行以下命令使更改生效:
bash source ~/.bashrc # 或者 source ~/.zshrc
检查 CMake 版本确保安装正确:
bash cmake --version
如果一切设置正确,您应该看到 CMake 版本信息,表明安装成功并且配置了环境变量。
通过以上步骤,您已经成功在您的 aarch64 架构的 Linux 系统上安装了 CMake 3.28.2 版本,并且能够开始使用它构建项目了。
CMakeLists.txt是CMake项目中最为关键的文件,它包含了构建项目所需的所有指令和配置。文件的基本结构包含以下几个部分:
cmake_minimum_required(VERSION x.x.x)
: 指定CMake的最低版本要求。 project(project_name [LANGUAGES] [languageName...])
: 定义项目名称及支持的编程语言。 add_executable(targetName [source files...])
: 添加一个可执行文件的目标,并指定源文件。 add_library(targetName [SHARED|STATIC|MODULE] [source files...])
: 添加一个库文件的目标,并指定类型(可选)及源文件。 include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
: 向编译器添加头文件搜索路径。 link_directories([directory [directory ...]])
: 向链接器添加库文件搜索路径。 target_link_libraries(targetName libraryName)
: 将库文件链接到目标上。 一个简单的CMakeLists.txt文件例子如下:
# 指定CMake的最低版本要求
cmake_minimum_required(VERSION 3.28.2)
# 定义项目名称及支持的语言
project(MyProject CXX)
# 添加一个可执行文件目标,并指定源文件
add_executable(MyApp main.cpp)
# 将库文件链接到目标上
target_link_libraries(MyApp MyLibrary)
add_executable
和 target_link_libraries
。 set(变量名 值)
进行定义,变量在CMake中非常重要,用于传递配置信息和参数。 if
、 foreach
等逻辑结构,用于编写条件判断和循环操作。 在CMake中,命令行工具 cmake
用于配置项目和生成本地构建系统(如Makefile)的文件。以下是一些常用的CMake命令:
cmake [options]
: 配置项目源码目录。 cmake -B
: 在指定目录创建构建目录并配置项目。 cmake --build
: 编译项目。 cmake --install
: 安装项目。 cmake -S . -B build
: 这条命令会以当前目录作为源码目录( -S .
),并创建一个名为 build
的目录( -B build
)来存放构建文件。 cmake --build build --target MyApp --config Release
: 这条命令会构建 MyApp
目标,并指定配置类型为 Release
。 cmake -DCMAKE_BUILD_TYPE=Release .
: 这条命令会设置编译时的类型为 Release
。 创建一个C++项目并生成Makefile的流程如下:
cmake
命令创建构建目录并配置项目。 例如,假设我们有一个名为 main.cpp
的源文件,内容如下:
#include
int main() {
std::cout << "Hello, CMake!" << std::endl;
return 0;
}
创建一个简单的CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.28.2)
project(MyApp CXX)
add_executable(MyApp main.cpp)
生成Makefile和构建项目的步骤:
mkdir build
cd build
cmake ..
make
在构建阶段,CMake会根据CMakeLists.txt文件生成构建系统文件(例如Makefile)。构建过程包括编译源代码文件和链接生成可执行文件或库文件。
安装步骤通常在构建后的阶段进行,用于将生成的文件(如可执行文件和库文件)复制到特定的目录中。安装过程也可以在CMakeLists.txt中通过 install
指令配置。
以下是一个简单的安装指令示例:
install(TARGETS MyApp RUNTIME DESTINATION bin)
该指令将 MyApp
可执行文件安装到 bin
目录下。
构建项目 : 使用命令 cmake --build build
来构建项目,这将执行Makefile中的命令进行编译和链接。
安装项目 : 如果我们已经配置了安装规则,可以直接使用 cmake --install build
命令,或者使用 make install
(如果构建系统支持此规则)。
构建和安装是将源码转化为可用程序的关键步骤,通过CMake,这个过程可以变得非常简洁和高效。
CMake作为一个跨平台的构建系统,不仅提供了基本的构建功能,还拥有强大的高级配置选项和缓存管理功能。在大型项目中,这些高级特性可以帮助开发者更细致地控制构建过程,优化性能,并确保构建配置的一致性和可维护性。
CMake的配置选项允许用户根据需要开启或关闭某些功能。这些选项通常通过CMakeLists.txt文件中的 option
命令定义。例如:
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
这里定义了一个名为 BUILD_SHARED_LIBS
的选项,用来控制是否构建共享库,默认值为 OFF
。
缓存是CMake中存储项目配置信息的一种机制,其主要作用是在多次运行CMake时保持选项的一致性。CMake的缓存变量可以在初次运行时设置,之后的运行中保持不变,除非被显式修改。
例如,可以通过以下命令强制一个缓存变量:
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE)
该命令将构建类型设置为"Release"并强制覆盖之前相同的缓存变量。
ccmake
或 cmake-gui
进行配置 为了方便地管理这些配置选项和缓存变量,CMake提供了 ccmake
(基于文本的界面)和 cmake-gui
(图形界面)这两种工具。使用这些工具,开发者可以直观地修改配置选项和查看缓存变量。
ccmake /path/to/build_dir
或者
cmake-gui /path/to/CMakeLists.txt
通过 ccmake
或 cmake-gui
,可以浏览和修改构建选项,甚至可以设置环境变量,为不同的构建配置提供了极大的灵活性。
CMake支持多种构建系统,包括但不限于Makefile、Ninja、Visual Studio、Xcode等。每种构建系统都有其特定的生成规则和用法,CMake通过统一的CMakeLists.txt文件与生成系统进行交互。
开发者可以根据操作系统和项目需求选择合适的构建系统。例如,在Linux环境下,常用的是GNU Make,而在Windows下,Visual Studio是主流。要指定构建系统,可以在CMake中使用 -G
选项:
cmake -G "Unix Makefiles" ..
尽管CMake抽象了构建过程,但在不同构建系统中仍存在一些差异。例如,编译器的选择、编译参数、并行编译的处理方式等。开发者在跨平台编译时需要注意这些差异,以确保项目能够在不同平台上正确编译。
在某些情况下,开发者可能需要为特定平台编写特定的构建规则。CMake允许通过条件判断来为不同的平台或系统生成不同的构建脚本:
if(APPLE)
# Apple平台特有的设置
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework CoreFoundation")
elseif(UNIX)
# Unix平台的设置
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
endif()
通过这种方式,CMake能够针对不同平台提供定制化的构建支持。
文档和测试是软件开发中不可或缺的部分,CMake提供了支持生成项目文档和集成测试用例的功能。
对于大多数项目来说,清晰、准确的文档是必不可少的。CMake可以利用Doxygen工具自动生成项目文档。开发者需要在CMakeLists.txt中添加相应的命令来启用Doxygen文档的生成:
set(DOXYGEN_INPUT_DIR "${PROJECT_SOURCE_DIR}/src")
set(DOXYGEN_OUTPUT_DIR "${PROJECT_BINARY_DIR}/docs")
find_package(Doxygen)
if(DOXYGEN_FOUND)
configure_file(${PROJECT_SOURCE_DIR}/Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile @ONLY)
add_custom_target(doc ALL
COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMENT "Generating API documentation with Doxygen"
VERBATIM)
endif()
为了保证项目的质量,CMake可以集成测试框架如CTest。开发者可以创建测试用例,并通过CTest来运行这些测试。一个典型的测试用例配置如下:
enable_testing()
add_executable(test_example test_example.cpp)
add_test(NAME example_test COMMAND test_example)
上面的配置会创建一个名为 example_test
的测试,运行名为 test_example
的可执行文件。
CMake的跨平台特性使得开发者能够为不同的操作系统生成构建脚本。通过简单的CMakeLists.txt配置,就可以在不同的平台上生成项目。
CMake通过检测系统的环境和特性来生成正确的构建文件。开发者可以使用以下命令来指定目标平台:
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchain_file.cmake -S . -B build
这里 -DCMAKE_TOOLCHAIN_FILE
指定了交叉编译工具链文件,这对于在非本机平台上编译是非常重要的。
在项目开发完成后,通常需要为用户生成安装包。CMake提供了命令和变量来配置安装规则。安装规则通常定义在 install()
命令中:
install(TARGETS myapp DESTINATION bin)
install(FILES config.h DESTINATION include)
install(DIRECTORY ${PROJECT_SOURCE_DIR}/resources DESTINATION share/myapp)
这段代码定义了如何安装目标、文件和目录。安装规则的设置使得在不同平台下生成安装包成为可能。
除了传统的安装方式,CMake还支持一些包管理器,如CPack。通过CPack,可以生成不同格式的安装包,如RPM、Deb或MSI,这使得跨平台安装变得更加方便。
set(CPACK_GENERATOR "TGZ")
include(CPack)
以上配置使得通过CPack生成压缩包格式的安装包成为可能。
以上所述的高级特性和构建系统支持,凸显了CMake作为一个现代化构建工具的综合实力。随着项目复杂度的增加,合理利用这些高级特性将会极大地提高开发和维护的效率。
本章节旨在通过具体实例展示CMake如何在跨平台项目中发挥其强大的跨平台构建能力。我们将构建一个简单的跨平台应用程序,并用CMake进行管理和构建。这个过程将涵盖多个操作系统和架构,以展现CMake的灵活性和力量。
首先,我们需要创建一个跨平台项目的基础结构。通常,这包括定义项目源代码的位置、项目所需的库、依赖关系,以及构建配置文件。
ProjectName/
|-- CMakeLists.txt
|-- src/
| |-- main.cpp
|-- include/
|-- lib/
|-- platform/
|-- linux/
| |-- CMakeLists.txt
|-- windows/
|-- CMakeLists.txt
在主CMakeLists.txt文件中,我们将使用 if
语句来检测平台,并根据不同的平台链接相应的库和执行特定的构建步骤。
# 主CMakeLists.txt
cmake_minimum_required(VERSION 3.28.2)
project(ProjectName)
# 检测操作系统并设置相应变量
if(UNIX)
set(PLATFORM "linux")
list(APPEND PLATFORM_PATH ${CMAKE_SOURCE_DIR}/platform/linux)
elseif(WIN32)
set(PLATFORM "windows")
list(APPEND PLATFORM_PATH ${CMAKE_SOURCE_DIR}/platform/windows)
endif()
# 寻找并链接平台相关的库文件
find_library(LIBpthread pthread PATHS ${PLATFORM_PATH}/lib)
target_link_libraries(MyExe ${LIBpthread})
# 向子目录传递变量
add_subdirectory(src)
由于不同的平台可能有不同的构建和链接步骤,我们在各自的平台特定的CMakeLists.txt文件中定义这些步骤。
# platform/linux/CMakeLists.txt
set(CMAKE_CXX_STANDARD 17)
add_library(MyExe main.cpp)
# platform/windows/CMakeLists.txt
set(CMAKE_CXX_STANDARD 17)
add_library(MyExe main.cpp)
请注意,在这里我们没有包含特定于平台的编译器选项,但在实际的项目中,你可能需要设置特定的编译选项来处理不同平台的兼容性问题。
一旦设置了项目结构和CMake配置文件,构建项目就变得非常简单。在Linux或Windows的命令行中,你可以使用以下命令。
mkdir build
cd build
cmake ..
cmake --build .
这将为当前平台配置、编译和链接项目。为了测试跨平台功能,你可以尝试在不同的操作系统中执行这些步骤,并确保项目能够在每个平台上成功构建。
构建和测试完成后,我们需要优化构建过程,并创建适用于生产环境的部署步骤。这可能包括对构建系统的优化、压缩和打包应用程序以及创建安装程序。
使用CMake的生成表达式和配置文件,我们可以为不同的平台设置不同的优化标志,并在构建过程中根据需要启用它们。
# 在CMakeLists.txt中设置优化标志
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") # 默认优化标志
if(PLATFORM STREQUAL "linux")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") # Linux特定标志
elseif(PLATFORM STREQUAL "windows")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GL") # Windows特定标志
endif()
部署可以通过创建不同平台的安装包来完成。例如,对于Windows,你可以使用CPack和NSIS来创建安装程序,对于Linux,可以创建 .deb
或 .rpm
包。
通过这些步骤,我们可以看到CMake如何处理从开发到部署的整个生命周期,确保项目的可移植性和可维护性。
本文还有配套的精品资源,点击获取
简介:CMake是一个跨平台的自动化构建系统,通过配置文件简化了项目构建过程,并能够生成适应不同操作系统和编译器环境的构建工具。版本3.28.2针对Linux系统和aarch64架构预编译,适用于64位ARM处理器。该版本包括了所有必要的可执行文件、库、模块和文档。解压后,通过简单几步即可安装并开始使用CMake来构建项目。
本文还有配套的精品资源,点击获取