上位机知识篇---CMake


文章目录


前言

以上就是今天要讲的内容,本文简单介绍了CMake中CMakeLists.txt的基本语法。


CMake

CMake 是一个跨平台的安装(编译)工具,能够使用简单的声明性语句 描述所有平台的安装(编译过程) 。在 CMake 中,构建系统的描述 是通过编写 CMakeLists.txt 文件来实现的。以下是 CMake 中常用的一些规则和指令的详细介绍:

基本指令

最低版本要求

cmake_minimum_required(VERSION 3.10)

指定 CMake 最低版本要求。

项目名称

project(MyProject)

设置项目名称,并隐式定义了几个变量,如 PROJECT_SOURCE_DIR 和 PROJECT_BINARY_DIR。

编译选项

为编译器添加全局编译选项

指定编译选项

add_compile_options()

为编译器添加全局编译选项。

预处理定义

add_definitions(-DFOO -DBAR)

添加预处理定义。

标准版本

set(CMAKE_CXX_STANDARD 11)

设置 C++ 的标准版本。

指定其源文件

指定可执行文件及其源文件

指定源文件

add_executable(myapp main.cpp src/foo.cpp)

指定要编译的可执行文件及其源文件。

指定库文件及其源文件

add_library(mylib STATIC src/foo.cpp src/bar.cpp)

指定要编译的库其源文件,可以是 STATIC, SHARED 或 MODULE 类型。

指定包含目录

添加头文件搜索路径

指定包含目录

include_directories(/usr/local/include)

添加头文件搜索路径。

添加特定目标搜索路径

target_include_directories(mylib PUBLIC /usr/local/include)

为特定目标添加头文件搜索路径。

指定链接库

添加库文件的搜索路径

指定链接库

link_directories(/usr/local/lib)

添加库文件搜索路径。

指定可执行文件或需要链接的库

target_link_libraries(myapp mylib)

指定可执行文件或库需要链接的库。

控制构建流程

添加子目录、指定输出目录

控制构建流程

add_subdirectory(source_dir binary_dir EXCLUDE_FROM_ALL)

添加一个子目录,并可以指定构建输出目录。

查找源文件、并存储

aux_source_directory(. SRC_LIST)

查找指定目录下的所有源文件,并将列表存储在一个变量中。

安装规则

安装目标到指定路径

安装规则

install(TARGETS mylib myapp DESTINATION bin)

安装目标到指定路径。

安装文件到指定路径

install(FILES COPYRIGHT README DESTINATION share/doc/cmake)

安装文件到指定路径。

查找包

查找并加载外部包

查找包

find_package(PackageName version EXACT QUIET REQUIRED)

查找并加载外部包的设置。

查找库文件

find_library(LIBRARY_NAME NAMES libraryname PATHS /usr/local/lib)

查找库文件。

逻辑控制

逻辑控制

if(MSVC)

检查是否在 Microsoft Visual C++ 编译器下。

elseif(${CMAKE_BUILD_TYPE} MATCHES Debug)

检查构建类型是否为 Debug。

else()

否则。

endif()

结束 if 语句。

宏和函数

宏和函数

macro()

定义宏,宏调用时会直接展开代码

function()

定义函数,函数调用时会传递参数。

属性设置

属性设置

set_target_properties(target1 target2 ... PROPERTIES prop1 value1 prop2 value2 ...)

设置目标的属性。

##其他指令

其他指令

option(USE_SOME_FEATURE "Use some feature" ON)

提供一个选项,用户可以选择是否启用。

打印消息

message(STATUS "This is a status message")

打印消息,可以是 STATUS, SEND_ERROR, FATAL_ERROR 等。

这些规则和指令只是 CMake 中的冰山一角。CMake 的功能非常强大,支持模块化、跨平台构建,以及许多高级特性,如生成器表达式和自定义命令。CMakeLists.txt 文件可以根据项目的复杂度变得非常复杂,因此理解和掌握这些基本规则是编写高效 CMake 脚本的关键。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了CMake中CMakeLists.txt的基本语法。

相关推荐
MartinYeung519 分钟前
[论文学习]Mamba:具有选择性状态空间的线性时间序列建模
学习
j7~21 分钟前
【数据结构初阶】队列的实现(链式队列 + 循环队列)--详解
c语言·开发语言·数据结构·学习·队列·queue·c\c++
草莓熊Lotso29 分钟前
【Linux网络】深入理解Linux IO多路复用:select服务器完善、内核原理与poll实战
linux·运维·服务器·c语言·网络·c++
Andy32 分钟前
Cpp进阶语法详解
c++
king_linlin38 分钟前
算法基础——算法复杂度
c语言·开发语言·数据结构·算法
xxwxx__1 小时前
51单片机电机控制全攻略:直流电机、舵机与步进电机
c语言·单片机·嵌入式硬件·51单片机
沐苏瑶1 小时前
计算机网络核心笔记:打通 TCP/UDP 与 HTTP/HTTPS 底层逻辑(重点上)
笔记·计算机网络·http·https
此生决int1 小时前
深入理解C++系列(04)——类和对象(下)
开发语言·c++
天天爱吃肉82181 小时前
AI Agent时代你的经验值多少钱?
人工智能·python·功能测试·学习·汽车
king_linlin2 小时前
数据结构——顺序表(附图文讲解|超详细)
c语言·数据结构·算法