• CMake教程系列-01-最小配置示例


    1.以最小的cmake配置为例

    eg:

    cmake_minimum_required(VERSION 3.0)
    project(sample CXX)
    add_library(sample sample.cpp)
    add_executable(sample_exe sample_exe.cpp)
    
    • 1
    • 2
    • 3
    • 4

    2.cmake_minimum_required

    • 该函数规定了此工程使用的cmake最低版本。
    • 由于cmake仍在不断发展,每个版本均会修改一些函数参数,也会添加更多函数。此函数的作用是为了防止使用版本过低的cmake来配置导致非预期错误。

    3.project

    该函数声明了此项目的名称。

    由于一个项目中可能包含多个库或多个可执行程序,在子库/子可执行程序中禁止使用与该函数声明中的相同的名称。

    该函数第二个参数为该项目的代码类型。

    • 可声明 C 或 CXX 或 C CXX。
    • 对应的代表了纯c工程,纯c++工程与混合工程。

    注意:声明的代码类型影响了编译器的选取。

    如上面所讲,每个cmake项目均应当声明此关键字,这影响了整个项目的属性。cmake也会提供项目对应的各个变量

    • PROJECT_NAME 项目名称
    • PROJECT_SOURCE_DIR 项目源码根目录
    • PROJECT_VERSION 项目版本
    • PROJECT_BINARY_DIR 项目生成的临时二进制目录,用于存放配置/编译中间文件。

    4.add_library / add_executable

    第一个参数代表了该库/可执行程序的名称。

    第二个参数代表了要生成的二进制使用的源文件。

    • 这里可以使用列表变量。
    • 也可以直接添加源文件名称。
    • 也可以在后续使用函数 target_source 添加源文件。
    • 注意:声明win32可执行程序时,应在add_executable中程序名称后添加关键字 WIN32 。

    add_library 还可以添加其他关键字例如:

    • SHARED 声明该库仅被作为动态库生成
    • STATIC 声明该库仅被作为静态库生成
    • OBJECT 声明该target仅生成中间binary文件,以供其他target使用
    • INTERFACE 声明该库仅是一个接口而并没有属于自己的binary
    • ALIAS 声明该库仅是其他库的别名
    • IMPORTED 声明该库不需要构建,而是已被导入具体配置。此方式一般存在于依赖提供的配置中。
    • 在未声明前五个关键字时,库的构建类型根据 BUILD_SHARED_LIBS 变化。

    5.关键字 target

    target在cmake中是一个很重要的概念,你应当将它理解为一个object
    它包含了例如以下内容:

    • 相关的源文件列表
    • 相关的编译选项
    • 相关的依赖库
    • 相关的头文件路径列表
    • 相关的库文件路径列表
    • 相关的其他属性

    所以,你在后续可以使用这个target名称做任何事情。对应的cmake函数会使用该名称自动提取函数需使用的属性值。

    6.关键字 PUBLC PRIVATE INTERFACE

    这些关键字是用于搭建依赖关系。

    • PUBLIC 声明该关键字后续的值在构建该target时使用,并向下游提供。

    • PRIVATE 声明该关键字后续的值仅在构建该target时使用,不向下游提供。

    • INTERFACE 声明该关键字仅向下游提供,不在构建该target时使用。

    • 参考:CMake教程系列-01-最小配置示例

  • 相关阅读:
    2022年重庆自考本科流程是怎样的?
    Java基础简单整理
    杰理之下载目录 INI 配置文件生成【篇】
    react-navigation学习
    电脑密码忘了怎么解除?最简单操作的方法
    DC综合基本概念:uniquify
    740 · 零钱兑换 2
    【C++】STL详解(九)—— set、map、multiset、multimap的介绍及使用
    SoftMax回归
    Kmeans算法实现目标客户聚类分析
  • 原文地址:https://blog.csdn.net/u011436427/article/details/125466704