set

https://www.jianshu.com/p/c2c71d5a09e9

  • 设置普通变量

set( … [PARENT_SCOPE])
将变量variable设置为值<value>...(可以是多个变量)变量variable作用域为调用set命令的函数或者当前目录

  • 设置缓存条目

set( CACHE [FORCE])
将缓存条目variable设置为值<value>...,除非用户进行设置或使用了选项FORCE,默认情况下缓存条目的值不会被覆盖。

  • 设置环境变量

用法:set(ENV{} [])
将环境变量设置为值<value>(注意没有...),接着使用$ENV{<variable>}会得到新的值

cmake的相关参数-U, -D, -C

http://www.360doc.com/content/19/1128/10/6959565_876066780.shtml
-C: 加载缓存条目文件,且优先级高于项目默认值
-D: 缓存条目,用于对特定参数的默认值进行修改

外部编译(out-of-source build)

让源码文件和cmake生成的工程文件分开,将cmake生成的工程文件放在一个单独的目录下面.

  • 一般会在项目顶级目录下(source code目录外面)新建build文件夹
  • cd build
  • cmake -DCMAKE_BUILD_TYPE=Release -DNCNN_VULKAN=ON -DNCNN_SYSTEM_GLSLANG=ON -DNCNN_BUILD_EXAMPLES=ON ..

make -j$(nproc)

add_subdirectory

add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
为构建添加子目录,在子目录中有对应的CMakeList.txt;顶层CMakeLists.txt里定义的变量可以看作是全局的, 所以在其他的CMakeLists.txt文件里也能访问 常用命令概述 - 图1

configure_file

configure_file( [COPYONLY] [ESCAPE_QUOTES] )
将一份文件拷贝到另一个位置

.cmake 文件

就像CMakeList.txt的库一样,加载后可以在CMakeList.txt中使用它的一些函数和定义