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

cmake项目基本demo

# 设置最低CMake版本要求
cmake_minimum_required(VERSION 3.10)# 项目名称和版本
project(MyProject VERSION 1.0.0)# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 设置编译器选项
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -O2")set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG")
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /O2")
endif()# 设置输出目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)# 包含头文件目录
include_directories(${CMAKE_SOURCE_DIR}/include)# 收集源文件
file(GLOB_RECURSE SOURCES "${CMAKE_SOURCE_DIR}/src/*.cpp""${CMAKE_SOURCE_DIR}/src/*.c"
)file(GLOB_RECURSE HEADERS "${CMAKE_SOURCE_DIR}/include/*.h""${CMAKE_SOURCE_DIR}/include/*.hpp"
)# 创建可执行文件
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})# 链接目录(如果有外部库)
# link_directories(/usr/local/lib)# 链接库(如果需要)
# target_link_libraries(${PROJECT_NAME} 
#     pthread
#     m
# )# 如果要创建静态库而不是可执行文件,使用以下命令替代add_executable
# add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS})# 如果要创建动态库
# add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS})# 安装配置
install(TARGETS ${PROJECT_NAME}RUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION lib
)# 安装头文件
install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/DESTINATION includeFILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
)# 可选:启用测试
# enable_testing()
# add_subdirectory(tests)# 可选:添加子目录
# add_subdirectory(external)
# add_subdirectory(docs)

创建一个基础的CMakeLists.txt模板,适用于大部分C++项目:这个模板包含了C++项目的基本配置,主要功能:

核心配置:

  • 设置CMake最低版本要求(3.10)
  • 定义项目名称和版本
  • 设置C++标准(C++17)
  • 配置编译器选项和优化级别

推荐的项目目录结构:

MyProject/
├── CMakeLists.txt
├── include/           # 头文件
│   └── *.h, *.hpp
├── src/              # 源文件
│   └── *.cpp, *.c
├── build/            # 构建目录(手动创建)
├── tests/            # 测试文件(可选)
└── external/         # 第三方库(可选)

使用方法:

# 创建构建目录
mkdir build && cd build# 生成构建文件
cmake ..# 编译项目
make          # Linux/Mac
# 或
cmake --build .  # 跨平台# 运行程序
./bin/MyProject

常用修改:

  1. 修改MyProject为你的项目名
  2. 调整C++标准版本(11/14/17/20)
  3. 取消注释库链接部分添加依赖
  4. 根据需要选择生成可执行文件、静态库或动态库
http://www.dtcms.com/a/306411.html

相关文章:

  • AWS IAM:安全访问管理的核心指南
  • 开发避坑短篇(10):ArithmeticException无限循环小数的精确处理方案
  • 地图可视化实践录:显示高德地图和百度地图
  • JavaWeb前瞻—JDBC
  • Rabbitmq中常见7种模式介绍
  • QString 内存机制详解
  • 【Excel】制作双重饼图
  • 恢复IP地址
  • 明远智睿V2H核心模组:工业4.0时代的“性价比革命”
  • 双塔模型 + 自监督学习:解决长尾物品表征难题
  • IBus vs. Fcitx5:一场 Linux 输入法框架的正面交锋
  • Maximum Subarray Sum
  • Redis高可用性
  • CSM7020L 磷酸铁锂电池充电管理的太阳能草坪灯 LED 驱动芯片 SOT23-6封装 带多种反接功能
  • LLM之RAG理论(十八)| ChatGPT DeepResearch 深度研究功能全面技术分析报告
  • 使用Docker 在Rocky Linux 9.5上在线安装Dify
  • 2025年DDoS攻防战:六层防护体系构建业务“数字免疫”
  • 从0开始学linux韦东山教程Linux驱动入门实验班(7)
  • 伦敦招聘数据管道系统设计与实现
  • android-PMS-常见定制场景
  • 【文章浏览 I】
  • 【7】串口编程三种模式(查询/中断/DMA)韦东山老师学习笔记(课程听不懂的话试着来看看我的学习笔记吧)
  • luoguP13511 [KOI P13511 [KOI 2025 #1] 等腰直角三角形
  • S3、SFTP、FTP、FTPS 协议的概念、对比与应用场景
  • vulhub ica1靶场攻略
  • AI框架工具FastRTC快速上手2——整体框架及Stream类详解
  • 浏览器pdf、image显示
  • MaxKB+MinerU:通过API实现PDF文档解析并存储至知识库
  • 虚幻基础:旋转体
  • 在java开发中,错误信息类中定义一个errMap,为什么要在static{}中,put键值对?这是为什么?好处是什么?