CMake是什么
CMake 是一个跨平台的项目构建工具,可以帮助生成MakeFile。
CMakeLists.txt指令和使用
1、使用 # 添加行注释;
2、cmake_minimum_required 指定最低CMake版本;
3、add_executable生成可执行程序名称;
# 这是一个 CMakeLists.txt 文件
cmake_minimum_required(VERSION 3.0)
project(项目名称)
add_executable(可执行程序名 源文件名称)
4、使用set定义字符串变量;${变量名}使用这个变量;set可以指定c++标准,C++标准对应有一宏叫做DCMAKE_CXX_STANDARD;指定可执行程序输出的路径,也对应一个宏,叫做EXECUTABLE_OUTPUT_PATH
# SET 指令的语法是:
# [] 中的参数为可选项, 如不需要可以不写
# 1、set用法1
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
add_executable(app ${VAR})
# 2、set用法2 增加-std=c++11
set(CMAKE_CXX_STANDARD 11)
# 3、set用法3 指定可执行程序的生成目录
set(HOME 你的路径)
set(EXECUTABLE_OUTPUT_PATH ${HOME}/bin)
5、搜索文件 可以使用aux_source_directory命令或者file命令。
# 方式1 aux_source_directory
# CMAKE_CURRENT_SOURCE_DIR是当前目录宏
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC)
#方式2 file
#GLOB: 将指定目录下搜索到的满足条件的所有文件名生成一个列表,并将其存储到变量中。
#GLOB_RECURSE:递归搜索指定目录,将搜索到的满足条件的文件名生成一个列表,并将其存储到变量中。
file(GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB MAIN_HEAD ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)
6、包含头文件路径使用include_directories命令;
include_directories(headpath)
7、制作动态库或静态库
#生成静态库
add_library(库名称 STATIC 源文件1 [源文件2] ...)
#生成动态库
add_library(库名称 SHARED 源文件1 [源文件2] ...)
# 设置动态库/静态库生成路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 包含静态库路径
link_directories(${PROJECT_SOURCE_DIR}/lib)
# 链接动态库
# 在cmake中指定要链接的动态库的时候,应该将命令写到生成了可执行文件之后
# 需要指定动态库的路径
link_directories(${PROJECT_SOURCE_DIR}/lib)
target_link_libraries(
<target>
<PRIVATE|PUBLIC|INTERFACE> <item>...
[<PRIVATE|PUBLIC|INTERFACE> <item>...]...)
8、输出日志
# 输出一般日志信息
message(STATUS "source path: ${PROJECT_SOURCE_DIR}")
# 输出警告信息
message(WARNING "source path: ${PROJECT_SOURCE_DIR}")
# 输出错误信息
message(FATAL_ERROR "source path: ${PROJECT_SOURCE_DIR}")
9、变量操作
字符串拼接可以使用set命令也可以使用list命令;
set(变量名1 ${变量名1} ${变量名2} ...)
# 追加(拼接)
list(APPEND SRC_1 ${SRC_1} ${SRC_2} ${TEMP})
# 移除 main.cpp
list(REMOVE_ITEM SRC_1 ${PROJECT_SOURCE_DIR}/main.cpp)
10、添加宏定义;
add_definitions(-D宏名称)
11、CMake常见宏