本文目录

  1. 一、CMakeFiles文件书写语法
    1. 1. CMake中条件判断语句
    2. 2. 设置编译选项
    3. 3. 打印信息到屏幕
  2. 二、cmake编译命令行参数详解
    1. 1. 如果想要将项目编译成动态链接库的形式,可以在命令行通过参数控制
    2. 2. 指定编译安装路径
  3. 三、CMake项目应用案例
    1. 1.下载并安装eigen、ceres-solver等数学运算库
  4. 参考资料

一、CMakeFiles文件书写语法

1. CMake中条件判断语句

if(<constant>)
...
else()
...
endif()

constant1/ON/YES/TRUE/Y/Non-zero 时判别为真;

constant0/OFF/NO/FALSE/N/IGNORE/NOTFOUND 或者为空字符串 或后缀为 -NOTFOUND 时判断为假。

大小写敏感,当不是上述列举出来的这些常量时,作为变量对待。

2. 设置编译选项

CMake 中可以通过 CMAKE_BUILD_TYPE 来对编译方式进行控制,使产生 Debug 类型的可执行程序或者 Release 类型的可执行程序,方便我们进行调试或者优化。

SET(CMAKE_BUILD_TYPE "MYTYPE")

MYTYPE 可以选择的类型有:空, Debug, Release, RelWithDebInfo, MinSizeRel

3. 打印信息到屏幕

当我们需要在文件中向屏幕输出一些提示信息或者警告,可以使用 MESSAGE 来实现。

MESSAGE([OPTION] "Description of the message")

OPTION 可以是 STATUS/WARNING/FATAL_ERROR 中任意一个,也可以保持缺省状态。默认是STATUS

MESSAGE(STATUS "Status test!")
MESSAGE(WARNING "Waning test!")
MESSAGE(FATAL_ERROR "Fatal error test!")

三种类型的输出显示如下,当设置为 FATAL_ERROR 并触发输出时,会使得 cmake 被终止。

-- Status test!
CMake Warning at CMakeLists.txt:16 (MESSAGE):
  Waning test!


CMake Error at CMakeLists.txt:17 (MESSAGE):
  Fatal error test!


-- Configuring incomplete, errors occurred!

二、cmake编译命令行参数详解

1. 如果想要将项目编译成动态链接库的形式,可以在命令行通过参数控制

cmake -DBUILD_SHARED_LIBS=ON ..

2. 指定编译安装路径

通过在编译命令行中使用指令 CMAKE_INSTALL_PREFIX 来控制。

cmake -DCMAKE_INSTALL_PREFIX=/path/to/install ..

三、CMake项目应用案例

1.下载并安装eigen、ceres-solver等数学运算库

可以参考openMVS build wiki

TODO

  • Improve compile time using forward declaration of options
  • 借鉴并学习 COLMAP 提升编译速度的技巧!

附:各种不同的GPU架构对应的 sm 标志

GPU_SM

(全文完)


参考资料

[1] Cmake中查找并使用其他程序库 https://blog.csdn.net/laolu1573/article/details/60573511

[2] 配置eigen3和ceres为thirdparty https://blog.csdn.net/billbliss/article/details/88585171

[3] Detecting Cuda Architecture required by CMake using NVCC https://wagonhelm.github.io/articles/2018-03/detecting-cuda-capability-with-cmake

[4] Matching SM architectures (CUDA arch and CUDA gencode) for various NVIDIA cardshttp://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/