《Modern CMake》读书笔记

1. Running cmake

1.1. cmake选项

–build  指定输出目录

-j 指定并行度

–target 指定编译目标

1.2. 选择编译器

EXPORT CC=clang CXX=clang++ cmake …

1.3. 选择生成器

默认为make  通过cmake -G Ninja指定ninja

1.4. 指定编译选项

cmake -DXXX=YYY

cmake会将各种编译选项缓存到一个文件中,即CMakeCache.txt

1.5. 调试

调试makefile: VERBOSE=1 make

调试cmake:

  • cmake --trace,  打印出cmake运行的每一行脚本

  • cmake --trace-source=打印出中运行的每一行脚本

1.6. 指定编译类型

-DCMAKE_BUILD_TYPE:Debug或Release或RelWithDebInfo

-DCMAKE_INSTALL_PREFIX: 指定安装路径,默认为/usr/local

-DBUILD_SHARED_LIBS: 是否编译共享库,ON or OFF

-DBUILD_TESTING:  是否编译tests

2. Do’s and Don’ts

2.1. 不要做

  • 不要使用全局函数:  link_directories, include_libraries等

  • 非必要不使用PULIBC限制

  • 不要用glob匹配文件:当新增文件时,除非重新跑一遍cmake, make或其他编译工具将不会感知到新文件

  • lib不要直接link到最终的target

  • link lib时不要忽略PUBLIC/PRIVATE关键字

2.2. 要做

  • 把cmake当做正经代码维护

  • 站在target的角度思考

  • 善用alias

  • 将通用功能抽象成函数或宏

  • 函数名统一小写

  • 善用cmake_policy

2.3. 选择cmake版本

2.3.1. os支持

  • 3.4: The bare minimum. Never set less.

  • 3.7: Debian old-stable.

  • 3.10: Ubuntu 18.04.

  • 3.11: CentOS 8 (use EPEL or AppSteams, though)

  • 3.13: Debian stable.

  • 3.16: Ubuntu 20.04.

  • 3.19: First to support Apple Silicon.

  • latest: pip/conda-forge/homebew/chocolaty, ect.

笔者目前用的是3.16

2.3.2. 特性

  • 3.8: C++ meta features, CUDA, lots more

  • 3.11: IMPORTED INTERFACE setting, faster, FetchContent, COMPILE_LANGUAGE in IDEs

  • 3.12: C++20, cmake --build build -j N, SHELL:, FindPython

  • 3.14/3.15: CLI, FindPython updates

  • 3.16: Unity builds / precompiled headers, CUDA meta features

  • 3.17/3.18: Lots more CUDA, metaprogramming

3. What’s new in in CMake

  • cmake 3.0: interface libraries, 允许将一组头文件抽象成一个lib

  • cmake 3.1: 支持c++11和compile features

  • cmake 3.2: 支持UTF-8

  • cmake 3.4:  支持swift语言,支持ccache

  • cmake 3.5: 支持ARM平台

  • cmake 3.6: 支持clang-tidy

  • 其他:略

4. 基础知识

指定最小版本

cmake_minimum_required(VERSION 3.1)

创建工程

project(MyProject VERSION 1.0
                  DESCRIPTION "Very nice project"
                  LANGUAGES CXX)

新增executable<

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值