【C++基础】CMake项目

news/2025/3/19 7:07:01/

CMake 项目简介

CMake 是一个跨平台的构建工具,用于管理 C/C++ 项目的编译过程。它通过生成标准的构建文件(如 Makefile、Visual Studio 项目文件、Ninja 构建文件等)来简化项目的构建流程。CMake 的核心是 CMakeLists.txt 文件,它定义了项目的构建规则、依赖关系和编译选项。


CMake 项目的基本结构

一个典型的 CMake 项目通常包含以下文件和目录:

MyProject/
├── CMakeLists.txt          # 项目的根 CMake 配置文件
├── include/                # 头文件目录
│   └── mylib.h            # 头文件
├── src/                    # 源文件目录
│   ├── main.cpp           # 主程序源文件
│   └── mylib.cpp          # 库源文件
├── tests/                  # 测试代码目录
│   └── test.cpp           # 测试代码
└── build/                  # 构建目录(由用户创建,用于存放构建文件)

CMakeLists.txt
# 指定 CMake 的最低版本
cmake_minimum_required(VERSION 3.10)# 定义项目名称和版本
project(MyProject VERSION 1.0)# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 设置编译选项
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -O2")# 添加头文件目录
include_directories(${PROJECT_SOURCE_DIR}/include)# 添加可执行文件
add_executable(myprogram src/main.cpp src/mylib.cpp)# 添加静态库
add_library(mylib STATIC src/mylib.cpp)# 链接库
target_link_libraries(myprogram mylib)# 查找并链接外部库
find_package(OpenCV REQUIRED)
target_link_libraries(myprogram ${OpenCV_LIBS})# 添加子目录
add_subdirectory(tests)# 安装规则
install(TARGETS myprogram DESTINATION bin)
install(TARGETS mylib DESTINATION lib)
install(DIRECTORY include/ DESTINATION include)# 启用测试
enable_testing()# 添加测试
add_test(NAME mytest COMMAND myprogram)
src/main.cpp
#include <iostream>
#include "mylib.h"int main() {std::cout << "Hello, World!" << std::endl;mylib::printMessage("This is a message from mylib.");return 0;
}
src/mylib.cpp
#include "mylib.h"
#include <iostream>void mylib::printMessage(const std::string& message) {std::cout << message << std::endl;
}
include/mylib.h
#ifndef MYLIB_H
#define MYLIB_H#include <string>namespace mylib {void printMessage(const std::string& message);
}#endif // MYLIB_H
tests/test.cpp
#include <iostream>
#include "mylib.h"int main() {mylib::printMessage("This is a test message.");return 0;
}

构建和运行项目

  1. 创建构建目录

    mkdir build
    cd build
    
  2. 生成构建文件

cmake …


3. **编译项目**:```bash
make
  1. 运行可执行文件

./myprogram


5. **运行测试**:```bash
make test

总结

CMake 项目通过 CMakeLists.txt 文件定义构建规则,支持跨平台构建。一个典型的 CMake 项目包括:

  1. 基本配置(项目名称、版本、编译选项)。
  2. 目标定义(可执行文件、库)。
  3. 依赖管理(头文件、外部库)。
  4. 安装规则和测试。

通过合理组织 CMake 项目,可以轻松管理复杂的构建过程,并实现跨平台支持。


http://www.ppmy.cn/news/1580261.html

相关文章

C++输入输出流第一弹:标准输入输出流 详解(带测试代码)

目录 C输入输出流 流的四种状态&#xff08;重点&#xff09; 标准输入输出流 标准输入流 逗号表达式 1. 逗号表达式的基本规则 示例 2. 图片中的代码分析 关键点解析 3. 常见误区 误区 1&#xff1a;逗号表达式等同于逻辑与 && 误区 2&#xff1a;忽略输入…

4.angular 服务

服务是在controller里面引入的服务&#xff1a; 最好是内部服务在前面&#xff0c;自定义服务在后面 内部服务 $scope $scope.$watch(‘属性名’, function(newVal, oldVal) {}, true) true是深度监听,对象函数等$scope.$apply 触发页面更新,里面传入回调函数,比如说之前那个…

[Banana Pi BPI-R4] RDK 和联发科推出Wi-Fi 7 宽带 CPE 的新硬件参考平台

全新参考板可帮助运营商、CPE 制造商和应用程序开发商轻松快速地测试和推出下一代 RDK-B 路由器、网关和应用程序联发科与 RDK 合作基于 Banana Pi 开源硬件项目打造全新宽带参考板 巴黎&#xff0c;2024 年 10 月 3 日——在NetworkX年度会议召开之前**&#xff0c;** RDK 管…

网络爬虫【简介】

我叫补三补四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲爬虫 一、网络爬虫的定义 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;又称为网络蜘蛛、网络机器人等&#xff0c;是一种按照一定规则自动抓取互联网信息的程序或脚本。它…

IP风险度自检,互联网的安全“指南针”

IP地址就像我们的网络“身份证”&#xff0c;而IP风险度则是衡量这个“身份证”安全性的重要指标。它关乎着我们的隐私保护、账号安全以及网络体验&#xff0c;今天就让我们一起深入了解一下IP风险度。 什么是IP风险度 IP风险度是指一个IP地址可能暴露用户真实身份或被网络平台…

基于Python+Ollama DeepSeek与MySQL进行数据分析探索

目录 1、前言 2、环境准备 3、本地部署 3.1、安装ollama 3.2、部署deepseek-r1模型 4、Python接入本地模型 4.1、示例代码 4.2、附加一些功能 4.3、其他的数据库 4.3.1、PostgreSQL 示例 4.3.2、SQLite 示例 5、总结 1、前言 在当今数据驱动的时代&#xff0c;数据…

qt介绍自定义插件 三

代码结构 主要编写这两个文件 #ifndef TBATTERY_H #define TBATTERY_H#include <QWidget> #include <QtUiPlugin/QDesignerExportWidget> class QDESIGNER_WIDGET_EXPORT TBattery : public QWidget {Q_OBJECT private:QColor colorBackgroundQt::white;QColor c…

2025 centos系统安装docker并迁移docker,docker安装到指定的目录以及文件迁移,docker迁移文件

需求&#xff1a;centos7系统&#xff0c;由于硬盘有限&#xff0c;需要把docker安装到指定的目录下&#xff0c;怎么安装&#xff1f; 1. 安装Docker引擎 步骤1.1&#xff1a;卸载旧版本&#xff08;如有&#xff09; sudo yum remove -y docker \docker-client \docker-cl…