cmake
文章平均质量分 84
结合在实际项目开发中的需求,深入学习CMake构建工具。
翔底
普通的码农,简单的职业生涯
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
cmake(14):利用set_property命令设置全局属性
在开发过程碰到需要在上级目录中构建,而源代码又分别写在下级目录的情况,同时又要根据不同的情况选择性地添加不同的源代码进行编译,所以考虑将需要编译的源代码放到一个cmake列表中。...原创 2022-07-29 13:40:15 · 9354 阅读 · 0 评论 -
cmake(13):构建时设置预处理宏定义以及add_compile_definitions命令详解
说明了如何使用 cmake 在构建时选择性自定义宏原创 2022-07-07 09:18:46 · 29884 阅读 · 0 评论 -
cmake(12):使用cpack生成DEB二进制文件
说明我之前习惯了直接Release源代码,然后在目标平台上编译运行的方式,但是有些项目要求将软件打包成安装包的形式发布,所以这里专门学习一下如何使用cpack(因为我现在主要使用cmake来构建项目)将工程打包成安装包和源代码包。CPack概述cpack是CMake的一个可执行文件,安装CMake后可以直接输入cpack命令,该命令是CMake提供的一个打包程序,它可以生成多种格式的二进制包和源代码包。CPack 在整个 CMake 工具链的位置如下:cpack会针对每种安装程序或package产原创 2022-02-08 08:54:12 · 3080 阅读 · 0 评论 -
cmake(11):将可执行和库文件分别输出到指定目录
1. 说明当一个工程编译后包含多个可执行和库文件,将这些文件分别放置在对应的目录里面会使得工程看起来更有序…(当然,这些都是我编的,毕竟要给自己找个理由)这篇笔记用于记录如何使用cmake在编译后将库文件和可执行文件生成在指定目录。2. 示例仍然以之前的代码为例。在主CMakeLists.txt文件中设置目录路径# 设置静态库文件目录set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)# 动态库文件目录set(CMAKE原创 2021-12-13 17:02:44 · 14557 阅读 · 0 评论 -
cmake(10):使用cmake编译linux驱动或内核模块
1. 说明这篇笔记用于说明如何使用cmake构建Linux驱动,这样可以方便地将driver和app作为一个整体统一构建。2. 示例首先来看一个代码示例,为了简化起见,我直接在驱动目录下进行构建而没有作为子目录添加到软件工程内。cmake_minimum_required (VERSION 3.0.0)project(driver_demo)# 由于我的系统更新过内核,所以这里需要设置内核源代码路径set(KDIR /home/linux/linux-5.12)# 定义编译函数/方法,原创 2021-08-03 16:12:37 · 7660 阅读 · 1 评论 -
cmake(9):包含指定目录的头文件
1. 说明在编译程序时,如果需要用到外部的头文件,而该头文件又没有被添加到系统默认的路径中(如:/usr/include,/usr/local/include和/usr/lib/gcc-lib/i386-linux/2.95.2/includ等)时,可以通过cmake的include_directories命令将该头文件添加进编译系统。include_directories()命令该命令将指定目录添加到编译器用于搜索包含头文件的目录路径中去。即相当于gcc编译时的"-I" 命令。当目标头文件不在编译器原创 2021-01-04 14:43:59 · 18837 阅读 · 1 评论 -
cmake(8):install命令详解
1. 说明之前的示例中有提到使用cmake的install命令来自动安装库和头文件,但是只是使用到了install命令很基础很少的部分,其实该命令作用十分丰富,本篇文档用于说明该命令的详细使用方法。2. install命令详解install()命令为项目生成安装规则,通过在源目录中调用install()命令指定的安装规则将在安装过程中按顺序执行。此命令有多种格式,分别对应不同的安装目标,如:二进制文件、动态库、静态库以及文件、目录、脚本等。基本命令格式如下:install(TARGETS <原创 2020-10-27 10:22:04 · 23346 阅读 · 0 评论 -
cmake(7):find_package命令详解
1. 说明cmake的find_package命令对于构建软件提供了极大的便利,虽然知道怎么使用已经能解决大部分问题,但是cmake支持哪些包?为什么它能找到需要的包?如果是自己编写的库,需要如何做才能使用该命令进行构建等原理性问题却始终困扰着我。这篇文章参考cmake官方文档和网上前辈的文章记录自己对find_package命令的学习和分析。1.1 cmake支持哪些包理论上只要符合find_package命令的查找条件,能让该命令识别的包或者库都会被支持。在实际使用时,我们可以把这些包分成三类:原创 2020-10-20 11:09:33 · 13244 阅读 · 3 评论 -
cmake(6):适配多种操作系统编译构建以及if命令
1. 说明cmake一个重要的特点便是可以跨平台代码构建,即同一套源代码可以在不改动的情况下直接迁移到另一中操作系统进行编译。这篇笔记用于说明如何在CMakeLists.txt中判断当前操作系统类型并支持Windows和Linux系统编译。2. 解决方案不同平台可能使用不同的编译器,对应的编译器选项和参数也可能不同,要适配多种操作系统的关键在于cmake要判断当前系统的类型,选择相应的编译器。判断操作系统的方法一般有两种。2.1 根据CMAKE_SYSTEM_NAME判断CMAKE_SYST原创 2020-10-07 10:35:47 · 4082 阅读 · 0 评论 -
cmake(5):选择编译器及设置编译器选项
1. 说明在实际的项目平台中可能安装有多个版本的编译器,同时由于不同的功能可能会需要设置不同的编译参数,这篇笔记就记录如何选择指定的编译器和配置参数。2. 选择编译器2.1 初始状态我使用的开发平台默认安装的gcc5.5.0,后面又安装了clang3.8.0,在默认path下C编译器会使用gcc 5.5.0,C++编译器使用clang3.8.0,如下所示:/build$ cmake ..-- The C compiler identification is GNU 5.5.0-- The C原创 2020-09-29 10:10:40 · 73530 阅读 · 0 评论 -
cmake(4):在多层目录结构下编译
1. 说明本文以一个简单的示例说明如何在多层目录结构下如何构建目标文件。1.1 项目结构在工程目录下包含三个目录和一个根CMakeLists.txtmain:main.cpp, CMakeLists.txtmath:add.h/cpp, CMakeLists.txtutility:utils.h/cpp, CMakeLists.txtCMakeLists.txt如下图所示:1.2 示例说明定义各个功能函数及子目录下的CMakeLists.txtmain:编译成一个可执行文件d原创 2020-09-24 19:54:45 · 11795 阅读 · 3 评论 -
cmake(3):编译库和链接可执行文件
1. 说明在实际开发的过程当中,我们会经常需要将部分程序编译成静态或动态库的形式,供其他应用程序调用而不是将所有文件一次编译为一个可执行文件。这篇笔记就记录使用cmake编译动态和静态库以及将库链接到可执行文件中的过程。1.1 程序功能总计三个文件:utils.cpp/utils.h:定义了一个简单的printmsg()函数供主函数调用,该函数会将传入的字符串打印出来。hello.cpp:主程序,调用printmsg()打印"Hello world"。1.2 CMakeLists.txt说明原创 2020-09-23 17:13:12 · 10227 阅读 · 1 评论 -
cmake(2):编译可执行文件的简单sample
1. 说明本篇将以一个极简的hello程序说明CMakeLists.txt的基本用法。2. 示例2.1 编写测试源程序//hello.cpp#include <iostream>int main(){ std::cout << "Hello, this is my first cmake sample" << std::endl; return 0;}2.2 编写CMakeLists.txt#CMakeLists.txtcmak原创 2020-09-21 11:02:38 · 1609 阅读 · 0 评论 -
cmake(1):cmake简介及安装
1. CMake简介CMake是一个用于管理源代码的跨平台构建工具,可以方便地根据目标平台和编译工具产生对应的编译文件,如基于Linux系统生成对应的Makefile文件或Widows Virtual Studio生成project等。虽然最主要用于C/C++语言的构建,但是也可以用于其它编程语言的源代码。如同使用make命令工具解析Makefile文件一样,cmake命令工具依赖于一个CMakeLists.txt的文件,该文件定义了代码的编译规则和目标等信息。官方文档说明:https://cmake原创 2020-09-17 20:27:36 · 1719 阅读 · 0 评论
分享