一、概念
CMake是一个构建系统,可以用于构建跨平台的C和C++项目,node.js中常用Cmake作为许多C和C++的第三方库构建系统。
二、将源代码构建成可执行文件
cmake_minimum_required(VERSION 3.10) //指定运行此配置文件所需的 CMake 的最低版本
project(项目名) //设置项目名
add_executable(可执行文件名 xxx.cc) //将xxx.cc 的源文件编译成为一个可执行文件
三、引入库到项目中
find_package(库名 REQUIRED/COMPONENTS)
//批量引入库文件和头文件
//REQUIRED:必须找到该库,找不到就报错
//COMPONENTS:从库中找子库(模块)xx
add_library(项目名 库的类型 xxx.cpp)
//使用指定的源文件向工程添加一个目标库
//就是将指定的源文件生成链接文件,然后添加到工程中去
//库的类型 TATIC(静态库)/SHARED(动态库)/MODULE(模块库)
//会根据STATIC或SHARED成为name.a或name.lib
set_target_properties(target1 ...PROPERTIES prop1 value1...)
//一个目标设置属性。该命令的语法是列出所有你想要变更的文件,然后提供你想要设置的值
//影响一个目标输出文件的名字的属性,PREFIX和SUFFIX属性覆盖了默认的目标名前缀和后缀
target_include_directories(<target> [SYSTEM] [AFTER|BEFORE] <INTERFACE|PUBLIC|PRIVATE> [items1...]..)
//AFTER或BEFORE
可以选择让添加的路径位于搜索列表的开头或结尾。缺省时,默认是AFTER。
INTERFACE,PUBLIC,PRIVATE
指定接下来的参数item(即路径)的作用域:
INTERFACE target对应的头文件才能使用,会指定target的属性INTERFACE_INCLUDE_DIRECTORIES
PUBLIC target对应头文件和源文件都能使用,会指定target的属性INCLUDE_DIRECTORIES 和INTERFACE_INCLUDE_DIRECTORIES
PRIVATE target对应源文件使用,会指定target的属性INCLUDE_DIRECTORIES
target_link_libraries(项目名,目标文件,库文件)
//目标文件与库文件进行链接
//目标文件指通过add_executable()和add_library()指令生成的