文章目录
 
  
 
 
1.概述
 
 
2.注释
 
 
3.命令
 
2.1cmake_minimum_required
 
- 语法:
cmake_minimum_required(版本号) - 例如:
cmake_minimum_required (VERSION 2.8) 
 
 
2.2project
 
 
# PROJECT 指令的语法是:
project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
       [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
       [DESCRIPTION <project-description-string>]
       [HOMEPAGE_URL <url-string>]
       [LANGUAGES <language-name>...])
 
 
 
2.3add_executable
 
- 语法:
add_executable(可执行文件名称,源文件列表) - 例如:
add_executable(demo, main.cpp, demo.cpp) 
 
 
2.4aux_source_directory
 
- 语法:
aux_source_directory(<dir> <variable>) - 例如:
aux_source_directory(. DIR_SRCS); 
 
 
2.5file
 
 
- 语法:
file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型) 
  - GLOB: 将指定目录下搜索到的满足条件的所有文件名生成一个列表,并将其存储到变量中。
 - GLOB_RECURSE:递归搜索指定目录,将搜索到的满足条件的文件名生成一个列表,并将其存储到变量中。
 
  
 
2.6include_directories
 
 
2.7制作静态库或者动态库
 
2.7.1制作静态库
 
- 语法:
add_library(库名称 STATIC Makefile地址) - 例子:
add_library(cale STATIC ${SRC_LIST}) 
 
 
2.7.2制作动态库
 
- 语法:
add_library(库名称 SHARED 源文件1 [源文件2] ...)  - 例子:
add_library(cale SHARED ${SRC_LIST}) 
 
 
2.6set
 
2.6.1 语法:
 
# SET 指令的语法是:
# [] 中的参数为可选项, 如不需要可以不写
SET(变量名 变量值 [CACHE TYPE DOCSTRING [FORCE]])
 
- 例如:
set(SRC_LIST main.cpp a.cpp b.cpp) 
 
 
2.6.2 如何使用变量:`
 
 
2.6.3指定使用的C++版本
 
#增加-std=c++11
set(CMAKE_CXX_STANDARD 11)
#增加-std=c++14
set(CMAKE_CXX_STANDARD 14)
#增加-std=c++17
set(CMAKE_CXX_STANDARD 17)
 
- 在执行 cmake 命令的时候指定出这个宏的值(通常不用)
 
 
#增加-std=c++11
cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=11
#增加-std=c++14
cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=14
#增加-std=c++17
cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=17
 
2.6.4指定输出的路径
 
set(EXECUTABLE_OUTPUT_PATH 路径)
 
2.6.5变量操作
 
2.7message
 
- 语法:
message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] 输出内容|变量) - 例如:
message(WARNING "这是一个警告") 
 
 
2.8链接静态库文件
 
 
- 连接库语法:
link_libraries(<static lib> [<static lib>...]) 
  - 参数1:指定出要链接的静态库的名字,可以是全名 libxxx.a,也可以是掐头(lib)去尾(.a)之后的名字 xxx
 - 参数 2-N:要链接的其它静态库的名字
 
  - 链接库文件语法:
link_directories(<lib path>) 
 
2.9链接动态库文件
 
 
- 语法:
target_link_libraries(可执行文件名称 库名称...) 
  - 可执行文件名称: 对应的是最终生成的可执行程序的名字
 - 库名称:这是可执行程序要加载的动态库,这个库是系统提供的线程库,全名为 libpthread.so,在指定的时候一般会掐头(lib)去尾(.so)。
 
  
 
4.生成可执行文件
 
 
- 执行cmake ./CMakeLists.txt所在的路径
 
 
 
- 生成Makefile后,执行make
 - 生成可执行文件