Started Date: 2022-02-17
Current State: Updating
Update Mark:
2022-02-17
2022-02-18
版本号确定,低于版本号按照错误处理
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
工程名,并指定工程使用语言(也可以不进行语言指定)
project(ctr_temp_prj LANGUAGES CXX)
生成可执行文件,前者为可执行文件名,后者为生成可执行文件需要的源文件/源文件列表
add_executable(hello-world hello-world.cpp)
生成一个库文件,库文件类型取决于第二个参数
add_library(lib_static//库文件命名
STATIC//STATIC对应静态链接库(.a);SHARED对应动态链接库(.so)
Lib.hpp
Lib.cpp//库文件所依赖的头文件和源文件都要被包含在这个列表中
)
将目标库文件链接到可执行文件。对于静态链接库,该语句直接将二进制代码“打入”可执行文件;对于动态链接库,为其与可执行文件创建联系。
target_link_libraries(hello-world lib_shared)
使用set()命令对特定变量进行设置,可用于分支语句、条件编译
set(USE_LIBRARY OFF)//可以对用户自定义的变量进行定义以及赋值
set(BUILD_SHARED_LIBS ON)//也可以对CMake内部已存在的全局变量进行设置
定义一个列表,之后可以使用列表名代替列表中所有元素的指代
list(APPEND _sources Message.hpp Message.cpp)
... ...
add_library(lib_static STATIC ${_sources})
//使用以上定义的_sources列表,代指Message.hpp Message.cpp两个文件生成一个静态链接库
add_executable(hello-world hello-world.cpp ${_sources})
//使用以上定义的_sources列表,代指Message.hpp Message.cpp两个文件生成可执行文件
引入一个包,来使用包中包含的一些命令集(类似于python中的import)
include(CMakeDependentOption)
... ...
cmake_dependent_option(
MAKE_STATIC_LIBRARY "Compile sources into a static library" OFF
"USE_LIBRARY" ON
)//使用CMakeDependentOption中引入的命令cmake_dependent_option()来创建一个有依赖关系的option
选项命令,将一些设置接口暴露给用户,使得用户在configure阶段可以通过CMake指令-D来对这些option中对应的变量进行设置;或着通过CMake-GUI直接点击进行配置
option(USE_LIBRARY "Compile sources into a library" OFF)
很常用的打印输出信息的指令
message(STATUS "Compile sources into a SHARED library? ${MAKE_SHARED_LIBRARY}")
//根据前文定义的MAKE_SHARED_LIBRARY,打印输出是否编译生成动态链接库的信息
条件语句
if(USE_SHARED_LIBRARY)//如果USE_SHARED_LIBRARY为真则执行语句块内的xxx
//直到elseif(XXX)、else()、endif()其中的一个
......
elseif(USE_STATIC_LIBRARY)//如果USE_SHARED_LIBRARY不为真且USE_SHARED_LIBRARY为真则执行
//直到elseif(XXX)、else()、endif()其中的一个
......
else()//如果USE_SHARED_LIBRARY和USE_SHARED_LIBRARY均不为真则执行直到endif()
......
endif()//语句块彻底结束
/*
逻辑为“真”的代表:1, ON, YES, true, Y 或非零数字
逻辑为“假”的代表:0, OFF, NO, false, N, IGNORE, NOTFOUND, 空字符串 或 以-NOTFOUND 作为后缀
*/
添加头文件搜索路径
include_directories(.)
为对象设置属性,这里设置输出的文件名属性,使生成其具有指定的文件名的文件
set_target_properties(lib_shared//对象名
PROPERTIES//表示将要对其属性设置
OUTPUT_NAME "message"//对输出名进行设置
)