现代cmake

cmake -B build(要放在的文件夹)

cmake —build build

PROJECT_SOURCE_DIR:当前项目源码路径(存放main.cpp的地方)
PROJECT_BINARY_DIR:当前项目输出路径(存放main.exe的地方)
CMAKE_SOURCE_DIR:根项目源码路径(存放main.cpp的地方)
CMAKE_BINARY_DIR:根项目输出路径(存放main.exe的地方)
PROJECT_IS_TOP_LEVEL:BOOL类型,表示当前项目是否是(最顶层的)根项目
PROJECT_NAME:当前项目名
CMAKE_PROJECT_NAME:根项目的项目名

  • -std=c++20比cmake中直接设定属性烂,因为cmake中的配置对跨平台更友好
  • 实际上就是字符串展开,因此可以{}实际上就是字符串展开,因此可以{}套${}
  • 动态库无法链接静态库,因此要让静态库生成的时候生成位置无关的代码就可以链接了,-fPIC
  • message(STATUS “…”) 表示信息类型是状态信息,有 – 前缀
  • message(WARNING “…”) 表示是警告信息
  • message(FATAL_ERROR “…”) 表示是错误信息,会终止 CMake 的运行
  • 清除缓存,其实只需删除 build/CMakeCache.txt 就可以了
  • 设置缓存变量,语法是:set(变量名 “变量值” CACHE 变量类型 “注释”)
  • CMake 对 BOOL 类型缓存的 set 指令提供了一个简写:option
  • option(变量名 “描述” 变量值),等价于:set(变量名 CACHE BOOL 变量值 “描述”)
  • 变量的传播规则:父会传给子
  • 可以用 set 的 PARENT_SCOPE 选项,把一个变量传递到上一层作用域(也就是父模块)。
  • if (DEFINED xx) 判断某变量是否存在
  • 在include里面再套一层文件夹是为了避免名字的冲突
  • 因此 find_package 并不是直接去找具体的动态库文件和头文件(例如 libQt5Core.so)。
    而是去找包配置文件(例如Qt5Config.cmake)

现代cmake
https://lhish.github.io/project/hide/现代cmake/
作者
lhy
发布于
2025年8月16日
许可协议