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 

链接有一个好处,当你引入其他第三方库时,不需要重复复制到项目根目录,节约时间。

点击这里返回目录

参考链接:

作者:leedsgarden

出处:https://www.cnblogs.com/leedsgarden/articles/16539836.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Leeds_Garden  阅读(661)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示