Cmakecmake在执行时会先生成makefile,然后在执行makefile进行编译同时cmake其拥有自己的类函数语法格式Cmake官方文档可自行查阅最简单的cmakecmake 在执行时会首先查找指定路径下是否拥有CmakeLists.txt文件名cmake_minimun_required(VERSION 3.0.0) #指定cmake版本 add_executable(main main.c) #添加目标与源文件这样便会生成一个简单的makefile设置变量# SET 指令的语法是 # [] 中的参数为可选项, 如不需要可以不写 SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]]) # SET(SRC main.c add.c ...) #在使用变量通过${VAR} add_executable(main ${SRC}) #添加目标与源文件搜索文件file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型) GLOB: 将指定目录下搜索到的满足条件的所有文件名生成一个列表并将其存储到变量中。 GLOB_RECURSE递归搜索指定目录将搜索到的满足条件的文件名生成一个列表并将其存储到变量中 例子 #方式1:利用宏定义搜索 file(GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c) file(GLOB MAIN_HEAD ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h) #方式2:指定搜索绝对路径 file(GLOB MAIN_HEAD /home/gec/project/src/*.c) tips 1.CMAKE_CURRENT_SOURCE_DIR 宏表示当前访问的 CMakeLists.txt 文件所在的路径。 2.要搜索的文件路径和类型可加双引号也可不加指定头文件/链接库#include_directories(headpath) 例子: include_directories(/home/gec/project/include) #链接库路径 link_directories(lib path) 例子: link_directories(/home/gec/project/lib) #链接库名称 #target_link_libraries(target lib ....) #target:可执行文件名 #lib:库的名称 例子: # 指定可执行程序要链接的动态/静态库名字 target_link_libraries(main mystring) #链接多个库名称 target_link_libraries(main mystring cal font)消息打印message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] message to display ...) (无) 重要消息 STATUS 非重要消息 WARNINGCMake 警告, 会继续执行 AUTHOR_WARNINGCMake 警告 (dev), 会继续执行 SEND_ERRORCMake 错误, 继续执行但是会跳过生成的步骤 FATAL_ERRORCMake 错误, 终止所有处理过程 例子: # 输出一般日志信息 message(STATUS source path: ${PROJECT_SOURCE_DIR}) # 输出警告信息 message(WARNING source path: ${PROJECT_SOURCE_DIR}) # 输出错误信息 message(FATAL_ERROR source path: ${PROJECT_SOURCE_DIR})cmake制作库静态库add_library(库名称 STATIC 源文件1 [源文件2] ...) 例子: #设置CMAKE语法版本 cmake_minimum_required(VERSION 3.0) #设置项目名称 project(CALC) #设置头文件路径 include_directories(/home/gec/project/include) #设置搜索所有源文件 file(GLOB SRC_LIST /home/gec/project/src/*.c) #把所有源文件生成静态库封装到 libcalc.a 中 add_library(calc STATIC ${SRC_LIST})动态库add_library(库名称 SHARED 源文件1 [源文件2] ...) 例子: #设置CMAKE语法版本 cmake_minimum_required(VERSION 3.0) #设置项目名称 project(CALC) #设置头文件路径 include_directories(/home/gec/project/include) #设置搜索所有源文件 file(GLOB SRC_LIST /home/gec/project/src/*.c) #把所有源文件生成静态库封装到 libcalc.a 中 add_library(calc SHARED ${SRC_LIST})设置库路径#设置CMAKE语法版本 cmake_minimum_required(VERSION 3.0) #设置项目名称 project(CALC) #设置头文件路径 include_directories(/home/gec/project/include) #设置搜索所有源文件 file(GLOB SRC_LIST /home/gec/project/src/*.c) # 设置动态库/静态库生成路径 set(LIBRARY_OUTPUT_PATH /home/gec/project/lib) # 生成动态库 #add_library(calc SHARED ${SRC_LIST}) # 生成静态库 add_library(calc STATIC ${SRC_LIST})