
C++编译工具cmake教程
文章平均质量分 70
# C++编译工具cmake教程,该专栏为子专栏,订阅总专栏即可。
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
奇妙之二进制
csdn博客专家,C/C++领域优质创作者,抖音搜奇妙之二进制,专注于Linux C/C++、嵌入式Linux开发,偶尔谈谈人生,目前致力于完成大约500篇的linux C/C++开发知识体系库,所有的文章都会一直保持更新(优化内容、排版),想学习的可以订阅我的专栏,也可以关注Linux 世界。
展开
-
CMake基础教程(42)cmake实践之编译fastdds
关键目标依赖于fastcdr、foonathan_memory、tinyxml,ssl、crypto这几个库。原创 2023-12-09 15:41:56 · 610 阅读 · 0 评论 -
CMake基础教程(41)打包系统(生成deb和源码包)
CPack是CMake的一个模块,用于自动化构建和打包项目的可执行文件、库文件、资源和文档,以生成安装程序、二进制分发包和源代码分发包。ZIP (.zip)CPack模块会生成两个配置文件,分别是和CPackConfig.cmake: 这个配置文件用于生成二进制分发包和安装程序。它包含了一些配置选项,以告诉CPack如何构建和打包您的项目,包括生成哪些文件、如何组织安装目录、选择何种打包格式(例如ZIP、DEB、RPM等)等。原创 2023-09-14 00:32:02 · 446 阅读 · 0 评论 -
cmake基础教程(40)生成器表达式
生成器表达式简单来说就是在CMake生成构建系统的时候根据不同配置动态生成特定的内容。条件链接,如针对同一个编译目标,debug版本和release版本链接不同的库文件条件定义,如针对不同编译器,定义不同的宏所以可以看到,其中的要点是条件,之所以需要自动生成,那绝大多数时候肯定是因为开发者无法提前确定某些配置,不能提前确定那往往就是有条件的。生成器表达式的格式形如$,可以嵌套,可以用在很多构建目标的属性设置和特定的CMake命令中。原创 2022-08-21 17:42:23 · 1363 阅读 · 0 评论 -
CMake基础教程(39)pkgconfig查找库和头文件
pkg-config是一个linux下的命令,用于获得某一个库/模块的所有编译相关的信息,在许多开发环境中广泛使用。pkg_check_modules 是 CMake 中的一个函数,用于检查和导入指定的库的编译和链接参数。通过使用 pkg_check_modules 函数,可以更方便地管理和使用库的相关信息,简化了 CMake 的配置过程。:库的路径,不包含 -L 前缀。这个变量中包含了库的路径,用于指定链接器在搜索库时应该查找的目录。这个变量中包含了需要链接到目标程序的库的名称以及库的绝对路径。原创 2022-04-22 00:39:23 · 1735 阅读 · 0 评论 -
cmake基础教程(38)导出项目install export
我们在很早之前介绍了install函数的使用,用于安装target、普通文件、目录,接下来介绍用其导出项目,用于其他cmake工程引用。这是一个重要的功能,cmake高手和新手的区别就在这里了。原创 2022-08-21 16:57:02 · 2393 阅读 · 1 评论 -
cmake基础教程(37)configure_file动态生成头文件
configure_file是一个在构建过程中用于生成配置文件的CMake命令。它允许开发人员将输入的模板文件与预定义的变量替换,并将结果输出到指定位置,从而生成最终的配置文件。cmake 中的 configure_file 指令将输入文件经过处理生成输出文件,处理的过程主要是变量替换。主要参数说明:input:输入的文件名,通常为xx-config.h.in,输入文件的位置相对于CMAKE_CURRENT_SOURCE_DIR。原创 2022-08-21 20:35:33 · 1287 阅读 · 0 评论 -
CMake基础教程(36)Linux交叉编译
很多时候,我们在开发的时候是面对嵌入式平台。即在你host宿主机上要生成target目标机的程序。里面牵扯到相关头文件的切换和编译器的选择以及环境变量的改变等CMake给交叉编译预留了一个很好的变量CMAKE_TOOLCHAIN_FILE,它定义了一个文件的路径,这个文件即 XXX.toolchain.cmake,里面set了一系列你需要改变的变量和属性,包括CMAKE_C_COMPILER,CMAKE_CXX_COMPILER,如果用Qt的话需要更改QT_QMAKE_EXECUTABLE以及如果用BO原创 2022-04-22 00:37:53 · 1040 阅读 · 0 评论 -
CMake基础教程(35)3万字长文介绍CMake构建系统
因为通常需要将源目录和对应的 build 目录添加到 INCLUDE_DIRECTORIES 中,所以可以启用 CMAKE_INCLUDE_CURRENT_DIR 变量,以方便将相应的目录添加到所有目标的 INCLUDE_DIRECTORIES 属性中。而变量 CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE 可以启用,以将相应的目录添加到所有目标的 INTERFACE_INCLUDE_DIRECTORIES 属性中。包含源文件的接口库将作为构建目标包含在生成的构建系统中。翻译 2022-08-17 09:21:10 · 696 阅读 · 1 评论 -
CMake基础教程(34)cmake_parse_arguments解析函数或者宏的参数
文章目录一、指令介绍1.2 Coding二、其他一、指令介绍cmake_parse_arguments 用解析函数(function)或 宏(macros)的输入参数,得到形式为<prefix>_xxx 的变量。cmake_parse_arguments(<prefix> <options> <one_value_keywords> <multi_value_keywords> <args&g原创 2022-04-09 15:51:23 · 5086 阅读 · 0 评论 -
CMake基础教程(33)get_filename_component提取文件名成分
get_filename_component这个命令挺有用的,可以用来提取完整文件名的成分。get_filename_component(<var> <FileName> <mode> [CACHE])FileName是文件的完整路径,如/etc/config/system.yaml,我们可以从中提取出文件后缀、路径、文件名到变量var。提取的成分由mode指定,mode支持以下值:DIRECTORY = Directory without file nameN原创 2022-04-09 14:49:23 · 10096 阅读 · 0 评论 -
CMake基础教程(32)文件操作指令FILE
常常需要搜索符合某些特征的文件,例如以.cc结尾的源文件,以.h结尾的头文件。add_xxx()这条命令比较low的地方是,不支持通配符,例如:add_library(xx src/*.cc)我们试图想通过*.cc来添加src目录下的所有源文件,这条命令做不到。我们可以借助file命令的搜索功能,file命令支持很多功能,例如文件读写、打包、权限修改等,我们只学其最常用的功能。file(GLOB <variable> [LIST_DIRECTORIES true|false原创 2022-04-01 01:05:16 · 5910 阅读 · 0 评论 -
CMake基础教程(31)add_dependencies添加target之间的依赖
add_dependencies(<target> [<target-dependency>]...)比较简单,给某个target添加依赖,target来自add_executable(), add_library(), or add_custom_target()。原创 2022-03-27 22:54:34 · 6920 阅读 · 0 评论 -
CMake基础教程(30)在cmake里执行命令execute_process
子进程的标准输出是由COMMAND参数指定的命令在执行过程中生成的任何文本输出。如果您需要在构建时执行自定义命令,可以使用add_custom_target()和add_custom_command()命令来创建自定义命令,这些命令会在构建时运行。如果需要按顺序执行多个命令,则可以使用多个execute_process调用,每个调用只包含一个COMMAND参数,以实现顺序执行的效果。如果同时为这两个选项指定了相同的变量名,则子进程的标准输出和标准错误输出将被合并,并按照它们产生的顺序放入变量中。原创 2022-03-27 21:49:12 · 3595 阅读 · 0 评论 -
CMake基础教程(29)add_custom_command添加定制化命令
custom一词应该翻译成定制化比较合适,表示cmake提供了让用户添加定制化命令的手段。该命令有两种格式,1、用法1 添加一个伪目标用以执行某些命令add_custom_command(OUTPUT output1 [output2 ...] COMMAND command1 [ARGS] [args1...] [COMMAND command2 [ARGS] [args2...] ...]原创 2022-03-27 17:04:31 · 6074 阅读 · 0 评论 -
CMake基础教程(28)自动生成目标依赖图
cmake --graphviz=xx可以生成dot图描述文件。安装graphviz之后可以使用dot命令转换成png图片。$ sudo apt install graphvizadd_custom_target(graphviz ALL COMMAND ${CMAKE_COMMAND}"--graphviz=foo.dot" . COMMAND dot -Tpng foo.dot -o foo.png WORKING_DIRECTORY"${CMAKE_BINARY_DIR原创 2022-03-14 23:47:56 · 6148 阅读 · 0 评论 -
CMake基础教程(27)find_package搜索包完成库链接和头文件添加(config模式)
前面我们介绍了find_package有两种模式,学习了module模式的使用,接下来我们介绍大多数第三方库都采用的模式:config模式。语法find_package(<PackageName> [version] [EXACT] [QUIET] [REQUIRED] [[COMPONENTS] [components...]] [OPTIONAL_COMPONENTS components...] [CONFI原创 2022-03-19 16:34:04 · 1611 阅读 · 0 评论 -
CMake基础教程(26)find_package搜索包完成库链接和头文件添加(module模式)
文章目录1、语法2、使用3、书写自己的FindModule.cmakefind_package命令有两种工作模式,我们今天先介绍简单的模块模式。1、语法这种模式下,cmake会先去cmake变量CMAKE_MODULE_PATH所指示的路径列表搜索一个叫Find.cmake的文件,然后再去cmake自带的find模块下查找。如果该文件找到了,cmake就会读取并执行。什么是find模块?为了方便我们在项目中引入外部依赖包,cmake官方为我们预定义了许多寻找依赖包的Module,他们存储在path原创 2022-03-14 17:49:01 · 2246 阅读 · 0 评论 -
CMake基础教程(25)add_library生成库
有时我们只需要编译出动态库,静态库,然后等着让其它程序去使用。这种情况下我们需要使用add_library函数。生成普通库add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [source1] [source2] [...])<name>表示库文件的名字,该库文件会根据命令里列出的源文件来创建。< name>对应于逻辑目标名称,转载 2022-01-09 23:49:32 · 12532 阅读 · 0 评论 -
CMake基础教程(24)add_executable生成目标可执行文件
当需要可执行导入对象的位置时,CMake会首先检查给对象的特定配置属性(详情看属性章节),只有特定配置没有设置的时候才会查找更加普遍的IMPORTED_LOCATION属性。这样使用的好处就是,当该对象可以用在CMake的上下文中时,CMake会自动将对象名替换为其在磁盘上的位置。创建该别名后,可以使用别名进行可执行目标的读、测试操作,但是不能利用别名对可执行目标的修改属性操作。将工程外部的可执行目标文件导入进来,不会有任何构建可执行目标文件的动作发生。,在工程内构建的可执行目标文件的属性。转载 2022-01-10 00:30:35 · 20081 阅读 · 0 评论 -
CMake基础教程(23)添加单元测试
CMake 提供了一个称为 CTest 的测试工具。通过在项目根目录下的CMakeLists.txt配置文件中添加enable_testing()可以开启项目的测试功能。一定要在根目录下的CMakeLists.txt中开启,不然执行make test时会报错。随后项目的cmake配置文件中可以添加add_test指令add_test(NAME <name> COMMAND <command> [<arg>...] [CONFIGURATION原创 2022-03-13 00:16:39 · 5563 阅读 · 0 评论 -
CMake基础教程(22)ExternalProject_add 导入并构建另一个基于CMake的外部项目
文章目录0、常用选项1、**导入**2、导入之后打补丁3、配置和构建4、安装5、测试6、实例ExternalProject_Add()命令创建一个target可以驱动外部工程的下载、更新/补丁、配置、构建、安装和测试流程。ExternalProject_Add(<name> [<option>...])0、常用选项PREFIX 用途见下面DOWNLOAD_DIR 指定用于存放通过URL方式下载的工程目录,当然是临时的,因为cmake下载之后会将其unpack到SOUR原创 2022-03-12 22:22:38 · 2770 阅读 · 0 评论 -
CMake基础教程(21)add_custom_target添加一个伪目标执行定制操作
参考https://cmake.org/cmake/help/latest/command/add_custom_target.html?原创 2022-03-27 01:44:37 · 1732 阅读 · 0 评论 -
CMake基础教程(20)认识cmake命令
可以使用的命令有:chdir, copy, copy_if_different copy_directory, compare_files, echo, echo_append, environment, make_directory, md5sum, remove_directory, remove, tar, time, touch, touch_nocreate, write_regv, delete_regv, comspec, create_symlink。在cmake运行时,打印额外的信息;原创 2022-03-14 23:32:00 · 4581 阅读 · 0 评论 -
CMake基础教程(19)find_library查找库路径
find_library ( <VAR> name | NAMES name1 [name2 ...] [NAMES_PER_DIR] [HINTS [path | ENV var]... ] [PATHS [path | ENV var]... ] [PATH_SUFFIXES suffix1 [suffix2 ...]] [DOC "cache documentation原创 2022-03-14 01:20:15 · 9849 阅读 · 0 评论 -
CMake基础教程(18)find_path查找文件路径
find_path命令用于查找文件的路径。简单格式:find_path (<VAR> name1 [path1 path2 ...])复杂格式:find_path ( <VAR> name | NAMES name1 [name2 ...] [HINTS [path | ENV var]... ] [PATHS [path | ENV var]... ] [PATH_SUFF原创 2022-03-18 21:55:39 · 2344 阅读 · 2 评论 -
CMake基础教程(17)add_compile_options添加编译选项(例如-g -Werror)
实际开发调试过程中,我们可能想加一些编译选项,例如-g,编译出支持gdb的调试程序。在cmake脚本中,设置编译选项可以通过add_compile_options命令,也可以通过set命令修改变量CMAKE_CXX_FLAGS或CMAKE_C_FLAGS。使用这两种方式在有的情况下效果是一样的,但请注意它们还是有区别的:add_compile_options命令添加的编译选项是针对所有编译器的(包括c和c++编译器),而set命令设置CMAKE_C_FLAGS或CMAKE_CXX_FLAGS变量则是分转载 2022-03-19 17:06:02 · 19804 阅读 · 1 评论 -
CMake基础教程(16)循环语句
文章目录1、foreach实现循环1. 第一种形式2. 第二种形式3. 第三种形式4. 第四种形式5、组合遍历2、while循环1、foreach实现循环1. 第一种形式foreach(loop_var arg1 arg2 ...) COMMAND1(ARGS ...) COMMAND2(ARGS ...) ...endforeach()在foreach和匹配endforeach之间的所有命令都会被系统记录而不被调用。 一旦找到了endforeach,则会执行原来记录的命令。在循环的原创 2022-03-13 16:43:38 · 4801 阅读 · 0 评论 -
CMake基础教程(15)cmake指定C++ 11标准
# specify the C++ standardset(CMAKE_CXX_STANDARD 11)set(CMAKE_CXX_STANDARD_REQUIRED True)以上两句必须在add_executable前面原创 2021-10-16 13:28:41 · 5201 阅读 · 0 评论 -
CMake基础教程(14)条件语句if else书写
如果需要对项目进行有条件的编译,则需要用到if-else语句。这个需求非常常见。一、基本语法if(<condition>) <commands>elseif(<condition>) # optional block, can be repeated <commands>else() # optional block <commands>endif()二、基本用法比如需要根据操作系统执行不同的代原创 2021-10-10 22:00:39 · 7430 阅读 · 0 评论 -
cmake基础教程(13)cmake指定安装位置前缀CMAKE_INSTALL_PREFIX
CMAKE_INSTALL_PREFIX 为cmake内置变量,用于指定cmake 执行install目标时,安装的路径前缀。方法1-在执行cmake时指定:cmake -DCMAKE_INSTALL_PREFIX=<你想要安装的路径>方法二-设置CMAKE_INSTALL_PREFIX 变量:SET(CMAKE_INSTALL_PREFIX <install_path>)要加在 PROJECT(< project_name>) 之后。在设置完inst原创 2021-09-08 00:24:48 · 35486 阅读 · 4 评论 -
cmake基础教程(12)函数和宏用法
参考:https://cmake.org/cmake/help/latest/command/function.htmlhttps://cmake.org/cmake/help/latest/command/macro.html#command:macro在CMake中,函数和C或C++中的函数非常相似。你可以将参数传递给函数,它们在函数内部变成了变量。同样,一些标准变量如 ARGC、ARGV、ARGN,以及 ARGV0、ARGV1 等也被定义了。函数调用具有动态范围。在函数内部,你处于一个新的变量作用域;原创 2024-04-10 14:08:47 · 389 阅读 · 0 评论 -
cmake基础教程(11)add_subdirectory如何添加非子目录的CMakeLists.txt
发现问题有这样一种情况。自己写了一个库,需要写测试程序。类似如下结构:hello-world/├── CMakeLists.txt├── main.c├── test│ ├── CMakeLists.txt│ └── main.c├── hello│ ├── CMakeLists.txt│ ├── hello.c│ └── hello.h└── world ├── CMakeLists.txt ├── world.c └── world.h原创 2021-06-12 15:42:19 · 5802 阅读 · 1 评论 -
cmake 基础教程(10)cmake常用语法速查
cmake_minimum_required (VERSION 2.8) CMake 最低版本号要求project (Demo1) 设置项目名称add_executable(Demo main.cc) 指定生成可执行程序aux_source_directory(/project/src DIR_SRCS)查找指定目录下的所有源文件,并将名称保存到 DIR_SRCS 变量这句话常和下面配合使用:add_executable(Demo ${DIR_SRCS})add_subdirect原创 2020-11-07 19:23:17 · 5034 阅读 · 0 评论 -
CMake基础教程(9)安装规则install命令
文章目录1、install命令2、安装二进制文件2、安装文件3、安装目录1、install命令在CMake中,安装是指将二进制文件、库文件和头文件等安装到指定目录中。该命令比较复杂,我们学习几个常用的场景即可。语法:install(TARGETS <target>... [...])install(IMPORTED_RUNTIME_ARTIFACTS <target>... [...])install({FILES | PROGRAMS} <file>...原创 2021-04-05 22:44:14 · 7255 阅读 · 3 评论 -
CMake基础教程(8)添加头文件、动态库搜索路径,链接动态、静态库
这是写cmake时最常用的操作,本文末尾给出一个综合范例供工作时参考。添加头文件搜索目录INCLUDE_DIRECTORIES语法:include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])它相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用。include_directories(../../../thirdparty/comm/include)AFTER和BEFO原创 2021-04-05 18:43:52 · 14417 阅读 · 2 评论 -
CMake基础教程(7)cmake生成debug和release两个版本程序(如何编译-g版本)
可以通过设置变量CMAKE_BUILD_TYPE生成 debug 版和 release 版的程序。该变量可以的取值是 Debug Release RelWithDebInfo 和 MinSizeRel。当这个变量值为 Debug 的时候,CMake 会使用变量CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG 中的字符串作为编译选项生成 Makefile,当这个变量值为 Release 的时候,工程会使用变量CMAKE_CXX_FLAGS_RELEASE 和 CMAKE原创 2020-11-08 23:30:32 · 15136 阅读 · 6 评论 -
CMake基础教程(6) 内部构建和外部构建
内部构建和外部构建这个词这么装逼,其实实际上面非常简单,别被吓到.通俗一点,内部构建就是在项目内部,有CMakeList.txt的地方,直接cmake .,比如我们前面讲的简单案例都是最简单的内部构建. 结果你也看见了,就是在项目下面生成了很多的临时文件。外部构建就是不直接在项目下面运行cmake, 而是自己建立一个接受cmake之后的临时文件的文件夹,然后再该文件夹下面调用cmake <CMakeList_path> 来构建.运行 make 构建工程,就会在当前目录(build 目录)中获原创 2020-11-07 20:14:53 · 5974 阅读 · 2 评论 -
CMake基础教程(4)自定义编译选项option命令
上面的程序值得注意的是第3行,这里include了一个 config.h 文件,这个文件预定义了 USE_MYMATH 的值。configure_file 命令会对输入的文件做一些处理,它是cmake提供的根据模板文件生成文件的命令。例如,可以将 MathFunctions 库设为一个可选的库,如果该选项为 ON ,就使用该库定义的数学函数来进行运算。CMake 允许为项目增加编译选项,从而可以根据用户的环境和需求选择最合适的编译方案或者开启关闭某些功能。通过ccmake提供的gui界面,可以修改配置值。原创 2021-04-05 17:11:37 · 12251 阅读 · 4 评论 -
CMake基础教程(3)cmake变量
主要有隐式定义和显式定义两种。隐式定义的一个例子是PROJECT指令,它会隐式的定义和两个变量;显式定义使用SET就可以通过来引用这个自定义变量了,它等价于HELLO_SRC=main.c。原创 2020-11-08 23:15:20 · 12400 阅读 · 2 评论 -
CMake基础教程(2)在Linux下为一个最简单的工程写一个最简单的CMakeLists.txt生成Makefile
文章标题很长,但是交代了所有的要素:指定平台是linux,事情是写个简单的CMakeLists.txt,目标是生成Makefile,完成编译,前提条件是准备一个最简单的工程。入门案例1:单个源文件strep 1:对于简单的项目,只需要写几行代码就可以了。例如,假设现在我们的项目中只有一个源文件 main.cc ,该程序的用途是计算两个数相加。#include <stdio.h>#include <stdlib.h>long long add(int para1, in原创 2020-11-08 23:35:56 · 11769 阅读 · 1 评论