CMake教程(三)——配置完善
接下来我以一个例子来解释常用的配置项。
cmake_minimum_required(VERSION 3.10)
set (CMAKE_CXX_COMPILER clang) # 指定C编译器
set (CMAKE_CXX_COMPILER clang++) # 指定C++编译器
set (CMAKE_C_STANDARD 99) # 指定C标准
set (CMAKE_CXX_STANDARD 14) # 指定C++标准
set(CMAKE_DEBUG_POSTFIX "_d") # 以_d作为Debug程序的后缀
# set(CMAKE_RELEASE_POSTFIX "_r") # 以_r作为Release程序的后缀
set (CMAKE_ENABLE_EXPORTS TRUE) # 允许编译器添加选项
project(hello LANGUAGES C CXX) # 选择项目类型
add_executable(${PROJECT_NAME} main.cpp)
set_target_properties(${PROJECT_NAME} PROPERTIES
DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) # 以_d来后缀Debug的lib文件夹
# set_target_properties(${PROJECT_NAME} PROPERTIES
# RELEASE_POSTFIX ${CMAKE_RELEASE_POSTFIX}) # 以_r来后缀Release的lib文件夹
set( CMAKE_EXPORT_COMPILE_COMMANDS ON ) # 生成数据库文件,如果你使用Vim或Emacs,这是必不可少的。
如果不配置,默认使用的是Release构建模式
常规的构建,其实有更简单的方法
cmake -S . -B build
cmake --build build
对于Debug和Release构建,你只需要
# 构建Debug在项目根目录中的debug文件夹
cmake -S . -B debug -D CMAKE_BUILD_TYPE=Debug
cmake --build debug
# 构建Release在项目根目录中的release文件夹
cmake -S . -B release -D CMAKE_BUILD_TYPE=Release
cmake --build release
如果你想使用Ninja构建,你可以简单地添加-G选项,如:
# 用Ninja构建Release
cmake -S . -B release -D CMAKE_BUILD_TYPE=Release -G Ninja
cmake --build release
如果你使用Vim或emacs,可能需要将数据库文件链接到项目根目录,实现代码补全。
# (常用)构建生成数据库文件后,链接到项目根目录
ln debug/compile_commands.json compile_commands.json
# 同样,但是一般生成release的时候已经准备打包了,一般不需要。
ln release/compile_commands.json compile_commands.json
链接有一个好处,当你引入其他第三方库时,不需要重复复制到项目根目录,节约时间。
参考链接:
- https://riptutorial.com/cmake/example/25142/c-cplusplus-version-selection
- https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html
- https://zhuanlan.zhihu.com/p/116953293
- https://cmake.org/cmake/help/latest/guide/tutorial/Packaging Debug and Release.html
- https://stackoverflow.com/questions/7724569/debug-vs-release-in-cmake
作者:leedsgarden
出处:https://www.cnblogs.com/leedsgarden/articles/16539836.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律