IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> CMakeList--->CMakeList的编写,cmake,平台通用项目构建工具 -> 正文阅读

[C++知识库]CMakeList--->CMakeList的编写,cmake,平台通用项目构建工具

视频教程康康这个Bilibili点击跳转,由于本文信息密度大,比较详细,可能略显繁琐,还请耐心阅读🐱

CMakeList 语法精述

PROJECT 工程名

  • 功能是指定工程名,并且支持语言是C和C++
    PROJECT(project_name C CXX)
    
  • 隐式定义了两个cmake变量 <project_name>_BINARY_DIR与 <project_name>_SOURCE_DIR,可以直接使用,默认指向当前目录
  • 如果修改工程名这两个变量的名字也会随之改变,也可以使用cmake预定义的PEOJECT_BINARY_DIR和PEOJECT_SOURCE_DIR来代隐式定义的两个变量,他们的内容是一样的

SET 设置变量

  • 用来设置指定的变量
    SET(SRC_LIST main.cpp test1.cpp test2.cpp)
    

MESSAGE 打印信息

  • 向终端输出用户自定义的信息
  • 包含三种信息
    SEND_ERROR产生错误生成过程被跳过
    SATUS生成前缀为- -的信息
    FATAL_ERROR立即终止所有cmake过程

ADD_EXECUTABLE 生成可执行文件

  • 生成可执行文件
    ADD_EXECUTABLE(HELL main.cpp test1.cpp)
    #也可以写成
    ADD_EXECUTABLE(HELL ${SRC_LIST})
    

ADD_SUBDIRECTORY 添加子目录

  • 添加子目录,并且指定其生成文件存放目录
    如下添加源文件存放的src目录,并指定存放目录为bin,若不指定存放目录,则会存放在src目录中
    ADD_SUBDIRECTORY(src bin)
    

ADD_LIBARY 输出库

  • 生成库文件
    ADD_BIBARY(lib_name SHARD libSource.cpp)
    
  • 可以生成SHARD(动态库)、STATIC(静态库)两种库文件

SET_TARGET_PROPERTIES

  • 指定输出的名称,对于动态库还可以指定动态库的版本和API
    如下为创建同名动态库和静态库
    ADD_LIBARY(hell_static STATIC hello.cpp)
    #重命名为hello
    SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
    #创建时清理同名文件防止创建失败
    SET_TARGET_PROPERTIES(hello_static PROPERTIES CLEAR_DIRECT_OUTPUT 1)
    
    ADD_LIBARY(hell_share SHARE hello.cpp)
    #重命名为hello
    SET_TARGET_PROPERTIES(hell_share PROPERTIES OUTPUT_NAME "hello")
    #创建时清理同名文件防止创建失败
    SET_TARGET_PROPERTIES(hell_share PROPERTIES CLEAR_DIRECT_OUTPUT 1)
    

INCLUDE_DIRECTORIES 添加头文件路径

  • 可以向工程添加多个头文件的路径,路径之间用空格隔开
    INCLUDE_DIRECTORIES(path/include/)
    

LINK_DIRECTORIES 添加库搜索路径

LINK_DIRECTORIES(path/lib/)

TARGET_LINK_LIBRARIES 添加库名称

TARGET_LINK_LIBRARIES(project_name libname.so)

内部构造和外部构造(更改cmake的生成目录)

  • 将文件都生成在当前目录是内部构造,这种情况很乱
  • 将文件生成在其他位置是外部构造,可以更好的整理工程目录
    #示例 在当前目录创建一个文件夹(随意命名),我命名为build
    #切换至build目录下执行cmake 参数跟至CMakeList.txt存在的目录即可,这里..找到上级目录即可
    #因为我的是windows环境,我需要指定生成makefile所以需要添加 -G "Unix Makefiles"
    
    cmake .. -G "Unix Makefiles"
    

CMakeList.txt添加子关联CMakeList.txt,更好的进行工程组织

  • 对于不同工程目录下的文件有时候需要更好的组织起来
  • 根目录下编写一个CMakeList.txt,src目录下再编写一个CMakeList.txt
    在这里插入图片描述
  • 其中根目录 CMakeList.txt内容如下
    PROJECT(HELLO)
    #src 指存放源文件的子目录 bin为其二进制文件和中间文件的存放目录
    ADD_SUBDIRECTORY(src bin)
    
  • src目录下 CMakeList.txt内容如下
    SET(SRC_LIST main.cpp)
    
    add_executable(hello ${SRC_LIST})
    
  • 在build目录下执行根目录下的CMakeList.txt即可生成可执行文件

Demo

  • 看了这么多来一个具体并且较大的工程练练手吧
  • 以正点原子STM32F767 Apllo开发板的GPIO为模板开始Demo
    1. 新建CMakeLists.txt和build目录
      在这里插入图片描述
    2. 添加cmsis_gcc.h文件,是用gcc编译所需的头文件,一些宏也需要添加

经验记录

windows cmake没有生成 Makefile

参考

CMake 语法 - 详解 CMakeLists.txt FILE的使用我是从这里找的
error: expected ‘(’ before ‘void’ __ASM void xxx gcc 编译正点原子的sys.c报错

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 21:52:22  更:2022-03-17 21:53:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:06:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码