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

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势

跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用
简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本
自动化构建:CMake能够自动检测系统上的库和工具,减少手动配置的工作量
灵活性:支持多种构建类型和配置(如Debug、Release),并允许用户自定义构建选项和模块
构建配置
CMakeLists.txt文件:CMake的配置文件,用于定义项目的构建规则、依赖关系、编译选项等。每个CMake项目通常包含一个或多个CMakeLists.txt文件
构建目录:为了保持源代码的整洁,CMake鼓励使用独立的构建目录(Out-of-source构建)。这样,构建生成的文件与源代码分开存放。
基本工作流程
  1. 编写 CMakeLists.txt 文件: 定义项目的构建规则和依赖关系。
  2. 生成构建文件: 使用 CMake 生成适合当前平台的构建系统文件(例如 Makefile、Visual Studio 工程文件)。
  3. 执行构建: 使用生成的构建系统文件来编译项目。

2.CMake基础

1.指定CMake的最低版本要求

cmake_minimum_required(VERSION <version>)
cmake_minimum_required(VERSION 3.10)

2.定义项目的名称和使用的编程语言

project(<project_name>[<language>...])
project(MyProject CXX)

3.指定要生成的可执行文件和其他源文件

add_executable(<target> <source_file>...)
add_executable(MyExecutable main.cpp other_file.cpp)

4.创建一个库(静态库或者动态库)及其源文件

add_library(<target> <source_file>...)
add_library(MyLibrary STATIC library.cpp)

5.链接目标文件与其他库

target_link_libraries(<target> <libraries>...)
target_link_libraries(MyExecutable MyLibrary)

6.添加头文件搜索路径

include_directories(<dirs>...)
include_directories(${PROJECT_SOURCE_DIR}/include)

简单的CMakeLists.txt文件实例

cmake_minimum_required(VERSION 3.10)
project(MyProject CXX)# 添加源文件
add_executable(MyExecutable main.cpp)# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)

查找库和包

        CMake可以通过find_package()指令自动检测和配置外部库和包

        常用于查找系统安装的库和第三方库

find_package()指令

基本用法:

find_package(Boost REQUIRED)

指定版本:

find_package(Boost 1.70 REQUIRED)

查找库并指定路径:

find_package(OpenCV REQUIRED PATHS /path/to/opencv)

使用查找的库:

target_link_libraries(MyExecutable Boost::Boost)

设置包含目录和链接目录:

include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})

实例

cmake_minimum_required(VERSION 3.10)
project(MyProject CXX)# 查找 Boost 库
find_package(Boost REQUIRED)# 添加源文件
add_executable(MyExecutable main.cpp)# 链接 Boost 库
target_link_libraries(MyExecutable Boost::Boost)

3.CMake构建流程

CMake的构建流程分为以下几个主要步骤,从设置项目到生成和执行构建命令

1.创建构建目录:保持源代码目录整洁

2.使用CMake生成构建文件:配置项目并生成适合平台的构建文件

3.编译和构建:使用生成的构建文件执行编译和构建

4.清理构建文件:删除中间文件和目标文件

5.重新配置和构建:处理项目设置的更改

详细的构建流程说明

1.创建构建目录

CMake推荐使用“Out-of-source”构建模式,即 将构建文件放在源代码目录之外的独立目录中。这样可以保持源代码的整洁,并方便管理不同的构建配置。

        创建构建目录:在项目的根目录下,创建一个新的构建目录。例如,可以创建一个名为build的目录

mkdir build

        进入构建目录:进入刚刚创建的目录

cd build

2.使用CMake生成构建文件

        在构建目录中运行CMake,以生成适合当前平台的构建系统文件(例如makefile、Ninja构建文件、Visual Studio工程文件等)

        运行CMake配置:在构建目录中运行CMake命令,指定源代码目录(指包含CMakeLists.txt文件的目录)。

cmake ..

3.构建和编译

        使用生成的构建文件进行编译和构建。

        不同的构建系统使用不同的命令。

        使用 Makefile(或类似构建系统):如果使用 Makefile,可以运行 make 命令来编译和构建项目。

        如果要构建特定的目标,可以指定目标名称。例如:make MyExecutable

4.清理构建文件

        构建过程中生成的中间文件和目标文件可以通过清理操作删除

        使用makefile:运行make clean命令来删除生成的文件

        使用Ninja:运行ninja clean命令来删除生成的文件

        手动删除:rm -rf ./build/*

5.重新配置和构建

        如果修改了CMakeLists.txt文件或项目设置,可能需要重新配置和构建项目

        重新运行CMake配置:在构建目录中重新运行CMake配置命令

cmake ..

        重新编译:使用构建命令重新编译项目        

make

4.构建实例

        假设项目结构如下

1.创建CMakeLists.txt文件

        在 MyProject 目录下创建 CMakeLists.txt 文件。

        CMakeLists.txt 文件用于配置 CMake 项目。

        CMakeLists.txt 文件内容:

cmake_minimum_required(VERSION 3.10)   # 指定最低 CMake 版本project(MyProject VERSION 1.0)          # 定义项目名称和版本# 设置 C++ 标准为 C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 添加头文件搜索路径
include_directories(${PROJECT_SOURCE_DIR}/include)# 添加源文件
add_library(MyLib src/mylib.cpp)        # 创建一个库目标 MyLib
add_executable(MyExecutable src/main.cpp)  # 创建一个可执行文件目标 MyExecutable# 链接库到可执行文件
target_link_libraries(MyExecutable MyLib)

说明:

        cmake_minimum_required(VERSION 3.10):指定 CMake 的最低版本为 3.10。

        project(MyProject VERSION 1.0):定义项目名称为 MyProject,版本为 1.0。

        set(CMAKE_CXX_STANDARD 11):指定 C++ 标准为 C++11。

        include_directories(${PROJECT_SOURCE_DIR}/include):指定头文件目录。

        add_library(MyLib src/mylib.cpp):创建一个名为 MyLib 的库,源文件是 mylib.cpp。

        add_executable(MyExecutable src/main.cpp):创建一个名为 MyExecutable 的可执行文件,源文件是 main.cpp。

        target_link_libraries(MyExecutable MyLib):将 MyLib 库链接到 MyExecutable 可执行文件。

2.创建构建目录

        打开终端,进入MyProject目录,然后创建构建目录:

mkdir build
cd build

3.配置项目

        在构建目录中使用CMake配置项目

        这将生成适合平台的构建系统文件

cmake ..

        cmake ..:.. 指向源代码目录,即包含 CMakeLists.txt 文件的目录。CMake 将读取 CMakeLists.txt 文件并生成构建系统文件。

4.编译项目

        使用生成的构建系统文件编译项目。根据生成的构建系统文件类型,使用相应的构建命令。

make

 

5.运行可执行文件

        编译完成之后,可以运行生成的可执行文件

./MyExecutable

相关文章:

  • vmware ubuntu扩展硬盘(可用)
  • 数据库和SQL面试题
  • 安装和使用G4F(GPT4Free) 最新0.5.3.2 版本
  • 使用 Python 正则表达式实现文本替换与电话号码规范化
  • 【实证分析】上市公司企业风险承担水平数据集(2000-2022年)
  • 针对药品仓库的效期管理问题,如何利用WMS系统“破局”
  • 斐波那契数列
  • Prompt‏ 工程和优化技巧
  • 网络安全A模块专项练习任务六解析
  • Python文本序列的类型
  • P9-QA 数据集生成工具
  • Python任务调度模型
  • 在Mathematica环境中做数值实验来观察逻辑映射的复杂度
  • STL 1 容器
  • NoMachine 远程连接时遇到“黑屏
  • Shell循环(三)
  • MySQL故障排查、生产环境优化与存储引擎MyISAM和InnoDB
  • GruntJS-前端自动化任务运行器从入门到实战
  • 关于 JavaScript 中 new Set() 的详解
  • MacOS 安装git
  • 日本做苹果壁纸的网站/网络推广服务
  • 廊坊住房与建设委员会网站/2022最新国内新闻50条简短
  • 泸县住房城乡建设委网站/如何去推广自己的产品
  • 北京哪里有专门做网站的地方/seo网站制作优化
  • 给卖假性药的做网站一般要判多久/无锡网站建设方案优化
  • 工艺品网站设计/网页游戏