
Makefile
文章平均质量分 81
致守
这个作者很懒,什么都没留下…
展开
-
CMake 项目构建和代码测试
CMake 是非常常见的 C++ 代码构建工具,在 C++ 项目构建中被广泛使用。本文我们将以著名的 CMake 入门示例为例,进行 CMake 的使用汇总。除配置变量外,CMake还可以自定义变量,它们通常用于保存一些路径,例如:cmake12set(SRC main.cpp add.cpp sub.cpp mul.cpp div.cpp) # 设置 SRC 变量。转载 2025-02-25 21:26:41 · 49 阅读 · 0 评论 -
【Cmake MODULE模块库】深度理解CMake中的add_library_ MODULE的全面指南
在我们开始深入讨论add_library命令之前,让我们首先了解一下CMake和构建系统的基础知识。CMake(跨平台的Make)是一个开源的、跨平台的构建系统,它以简洁的语法和强大的功能获得了广泛的应用。它可以跟踪依赖关系、生成构建脚本,并跨多个平台和编译系统工作。这使得CMake成为了处理复杂项目和大型代码库的理想选择。构建系统(Build Systems)是软件开发中的一个重要部分,它们可以自动处理编译和链接过程中的各种任务。转载 2025-02-05 17:56:26 · 77 阅读 · 0 评论 -
【CMake】CMake 编译选项设置
这个选项是一个公共的选项,不管是Release还是Debug都需要设置。对于C语言设置CMAKE_C_FLAGS相关参数,C++语言设置CMAKE_CXX_FLAGS相关参数。因为在最终编译的时候的编译选项不管是Release还是Debug都包含了CMAKE_CXX_FLAGS这个变量。:编译Release版本的时候采用的编译选项,默认包-O3选项,该选项表示优化等级;:编译Debug版本的时候会采用的编译选项,默认只有一个-g选项,包含调试信息;选项,因此,需要设置编译选项的时候,在。转载 2025-01-24 22:32:32 · 263 阅读 · 0 评论 -
Cmake之深入理解find_package()的用法
刚刚接触Cmake的时候,对于find_package的用法以及背后的原理经常一头雾水,官方文档比较晦涩难懂,网上的博客也都讲解的比较片面。这里通过实战代码案例进行一下详细的总结讲解。帮助自己加深理解的同时,也希望帮到更多的初学者。此处所有代码均可在我的github项目中找到,欢迎star。后续内容我也会持续更新。话不多说进入正题。转载 2025-01-24 16:48:32 · 44 阅读 · 0 评论 -
“轻松搞定CMake”系列之find_package用法详解
在我们实际开发过程中,经常不可避免会使用到第三方开源库,这些开源库可能是通过命令自动安装到系统目录中,也可能是由我们自己下载库的源码然后通过编译安装到指令目录下的。不管哪种方式安装的库文件,如果我们需要自己的项目中使用这些库,首先面临的第一个问题就是如何找到这些库。所谓“找到”这些库,其实是根据我们的需要找到指定版本的库头文件包含路径、链接库路径等,从而能够满足我们开发项目的编译链接需要。在没有CMake的时代,这种库查找链接的工作都需要借助MakeFile。转载 2025-01-23 22:57:54 · 141 阅读 · 0 评论 -
【cmake教程】find_path、find_library、find_program
查找成功时,会向变量<LIBRARY_NAME>中添加成功找到头文件的库文件(包含完整路径),如果在某个路径下查找多个头文件,只要查找到多个头文件中的某一个,也算执行成功。find_path 一般用于在某个目录下查找一个或者多个头文件,命令的执行结果会保存到 <VAR> 中。查找成功时,会向变量<VAR>中添加成功找到头文件的目录,如果在某个路径下查找多个头文件,只要查找到多个头文件中的某一个,也算执行成功。和 find_path 一样,命令的执行结果会默认缓存到 CMakeCache.txt 中。转载 2025-01-23 21:55:30 · 73 阅读 · 0 评论 -
include_directories 、 link_directories 、link_libraries之间区别
它们的作用分别是:设置头文件搜索路径、设置库文件搜索路径以及指定需要链接的库文件。CMake 提供了多个命令来设置头文件路径、库文件路径及链接库。告诉链接器在查找目标库文件时,除了默认路径,还可以从指定路径中查找。的头文件时,除了默认路径,还可以从指定路径中查找。在现代 CMake 中,推荐使用目标作用域的。用于指定编译阶段头文件的搜索路径。用于指定链接阶段库文件的搜索路径。在链接目标时,自动添加指定的库文件。中使用库的完整路径,避免使用。在上述示例中,链接器会在。,为目标精确设置所需的库。转载 2025-01-22 11:34:24 · 49 阅读 · 0 评论 -
gcc -ffunction-sections -fdata-sections -Wl,–gc-sections 参数详解
有时我们的程序会定义一些暂时使用不上的功能和函数,虽然我们不使用这些功能和函数,但它们往往会浪费我们的ROM和RAM的空间。这在使用静态库时,体现的更为严重。有时,我们只使用了静态库仅有的几个功能,但是系统默认会自动把整个静态库全部链接到可执行程序中,造成可执行程序的大小大大增加。指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了。可以看见,在最终的目标文件中,未使用的函数并未被链接进最终的目标文件。转载 2023-07-13 14:01:43 · 1626 阅读 · 0 评论 -
使用gcc参数-Wl,–gc-sections,不链接未用函数,减小可执行文件大小
再看一下,不带。转载 2023-07-13 13:59:20 · 1391 阅读 · 0 评论 -
静态库不要strip 太厉害
gcc -o ta test.c mylib.a 和 gcc -o tso test.c -L. -lmylib.so 我连接动态库文件时,编译可以通过,我自己做了一函数库,同样的代码生成了一个mylib.so和一个mylib.a文件,之后使用了 strip mylib.so 和。关于这个问题,想请教一下各位,发布静态库文件(.a)时,是否有需要使用strip命令去掉了所有的符号列表信息?strip mylib.a 这两条命令去除一些符号表和调试符号表信息, 感觉这两个库文件的体积大小确实缩小了,转载 2023-07-13 10:48:35 · 644 阅读 · 0 评论 -
linux gcc strip命令简介
strip经常用来去除目标文件中的一些符号表、调试符号表信息,以减小静态库、动态库和程序的大小。转载 2023-07-13 10:47:47 · 1045 阅读 · 0 评论 -
GNU Objcopy语法和使用
参数input-file和outfile分别表示输入目标文件(源目标文件)和输出目标文件(目的目标文件)。如果不指明源文件格式,objcopy会自己去分析源文件的格式,然后去和BFD中描述的各种格式比较,从而得知源文件的目标格式名。同时指明源文件、目的的文件的格式。将源目标文件中的内容复制到目的目标文件的过程中,只进行复制不做格式转换,源目标文件是什么格式,目的目标文件就是什么格式。objcopy被用来复制一个目标文件的内容到另一个文件中,可以使用不同于源文件的格式来输出目的文件,即可以进行格式转换。转载 2023-07-13 10:45:19 · 409 阅读 · 0 评论 -
【makefile笔记】patsubst和wildcard函数使用小结
文章中的文字可能存在语法错误以及标点错误,请谅解;转载 2023-03-04 16:01:37 · 311 阅读 · 0 评论 -
学习笔记:relocation R_X86_64_32 against `.rodata‘ can not be used when making a shared object;
解决多个.a静态库,链接成一个.so动态库出现:relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; 的错误。我的总目标是:写一个mainApi.cpp的文件,这个文件提供API给外部用户使用。mainApi.cpp需要依赖其他模块生成的静态库(在lib文件下)。将mainApi.cpp编译链接成一个.so动态库共外部使用。在编译的时候出现relocation R_X转载 2022-03-15 16:00:33 · 14448 阅读 · 0 评论 -
启用make多任务参数让构建过程加速完成
文章目录前言 寻找 可能的原因 加速 视网膜效应 随便聊聊 make cmake 总结前言是不是有时候觉得使用make命令编译时太慢了,特别是紧急修改BUG的时候,恨不得钻进电脑里帮着编译器一起干活,其实make命令是可以加速的,使用-j选项即可指定make启动的任务数,它是--jobs[=jobs]的缩写形式,比如make -j4就表示同时启动4个任务并行构建,虽然达不到4倍的关系,但是要比原来快多了。寻找寻找这样一个参数的原因还是觉得有时编译太...转载 2021-12-23 10:19:05 · 2011 阅读 · 0 评论 -
Makefile中的变量值的替换(一)
1.使用指定字符串替换变量中的后缀字符(串) 格式:$(var:a=b)或${var:a=b} 注意:替换表达式中不能有空格】 例: src := acc bcc ccc obj := $(src:cc=o) test: @echo "obj => $(obj)" make test输出结果: ao bo co2.变量的模式替换 使用%保留变量值中的指定字符串,替换替他字符 ...转载 2021-01-15 15:28:02 · 1362 阅读 · 0 评论 -
MakeFile .o .d文件放入指定的文件夹
######### Makefile COMMON #########c 还是 c++EXTENSION = c#gcc 还是 g++CC = gcc#生成的可执行文件名EXE = main#源文件路径 空格 可以继续添如 src src1 src2SUBDIR = src#.o文件存放路径OBJ = obj#.d文件存放路径DEP = dep #预处理选项(要包含的.h文件的路径)CPPFLAGS += -I /home/kouwq/Makefile/grokking_al.转载 2021-01-15 11:10:57 · 1898 阅读 · 0 评论 -
编译工具之makefile的常用函数
字符串操作函数wildcard用法:$(wildcard pattern…)描述:匹配任何满足匹配规则的文件返回:返回包含所有匹配项的字符串1 2 3subst用法:$(subst from,to,text)描述:将text中匹配from的字符替换为to返回:被替换后的字符串例子: $(subst ee,EE,feet on the street)结果: ‘fEEt on the strEEt’1 2 3 4 5 6 7patsub转载 2021-01-15 10:31:46 · 639 阅读 · 0 评论 -
Makefile详解——从入门到精通
https://blog.youkuaiyun.com/xujiaofu6181/article/details/86598988?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control-转载 2021-01-15 10:11:20 · 1141 阅读 · 1 评论 -
gcc/g++动态链接库和静态库的链接顺序
so文件:动态库a文件: 静态库exe文件:可执行程序(linux下以文件属性来标示是否是可执行文件,与后缀名无关)经过自己写的一些测试程序,大致了解了下gcc中链接顺序问题,总结出以下几点:1,动态库中可以包含另一个静态库,通过参数 -lxxx 把静态库libxxx.a加入so文件中,这样so文件中 就包含了libxxx.a的所有实现。当然,如果不包含libxxx.a也没有问题,这样生成的so会小一点。 如果不包含libxxx.a,最终使用这个so的可执行文件,在其生成时必须加入 -l...转载 2021-01-05 11:42:15 · 1039 阅读 · 0 评论 -
GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结
GCC 编译使用动态链接库和静态链接库1 库的分类根据链接时期的不同,库又有静态库和动态库之分。静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行。有别于静态库,动态库的链接是在程序执行的时候被链接的。所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用。(TODO:链接动态库时链接阶段到底做了什么)2 静态库和动态库的比较链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象.转载 2021-01-05 11:34:09 · 1260 阅读 · 0 评论 -
GCC编译过程与动态链接库和静态链接库
1. 库的介绍库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。 windows上对应的是.lib .dll linux上对应的是.a .so在这里先介绍下Linux下的gcc编译的几个选项g++ -c hellospeak.cpp会将hellospeak.cpp转载 2021-01-05 11:23:18 · 297 阅读 · 0 评论 -
Linux中gcc/g++的安装和使用
1、GCC、gcc、g++的区别:(1)三者比较 GCC: GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。 gcc是GCC中的GUN C Compiler(C 编译器) g++是GCC中的GUN C++ Compiler(C++编译器) 一个有趣的事实就是,就本质而言,gcc和g++并不是编译器,也不是编译器的集合,它们只是一种驱动器,根据参...转载 2021-01-05 10:45:49 · 3214 阅读 · 0 评论 -
CFLAGS,CPPFLAGS,CXXFLAGS in Makefile
CC 与 CXX:这是C 与 C++ 编译器命令。默认值一般是 “gcc” 与 “g++”。CPPFLAGSwill be given to theC preprocessor这是用于预处理阶段的选项。CFLAGS 与 CXXFLAGSCFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项。这两个变量实际上涵盖了编译和汇编两个步骤。https://www.cnblogs.com/lidabo/p/6068464....转载 2020-12-10 14:16:35 · 910 阅读 · 0 评论 -
编译选项
转自:http://www.firekyrin.com/archives/597.html编译选项让我们先看看 Makefile 规则中的编译命令通常是怎么写的。大多数软件包遵守如下约定俗成的规范:#1,首先从源代码生成目标文件(预处理,编译,汇编),"-c"选项表示不执行链接步骤。$(CC) $(CPPFLAGS) $(CFLAGS) example.c -c -o example.o#2,然后将目标文件连接为最终的结果(连接),"-o"选项用于指定输出文件的..转载 2020-12-10 14:15:02 · 950 阅读 · 0 评论 -
makefile编译与链接选项
最近看了makefile的手册之后,发现还是不知道怎么写makefile,而且就连看也看的是云里雾里,就我现在工作当中看到的一些makefile文件,只能看个大概的意思,一旦涉及到文件添加、静态库、动态库等增加、删除;文件搜索路径等的修改就没法下手了,因此下定决心必须对我比较关注的地方进行深度学习,知其然还要知其所以然,知道怎么从无到有写出来,而且别人的makefile还要知道怎么根据需求的变化进...转载 2020-02-28 13:46:25 · 4962 阅读 · 0 评论 -
谈谈goto for call三种句式
前言: 在批处理中最常见的就是goto for call三种句式,而学好这种句式的重要性是不言而喻的。所以,今天我们就来简要谈谈这三种句式:一、goto句式 go to在英名中的意思就是去向,因此goto就是批处理中的一个方向指示,如goto begin goto next goto again就是将程序分别引向:begin :next :again的标签处,如下:...转载 2019-12-11 18:15:11 · 828 阅读 · 0 评论 -
关于文件路径的反斜杠正斜杠和双斜杠问题
标签:c文件路径绝对路径相对路径斜杠it 分类:C 和OpenCV1C文件路径为什么要用双斜杠因为 \ 在 C/C++/C# 中是转义前导字符,例如 \n 代表换行。如果路径中刚好有类似转义字符开头的,那么就会引起问题,所以路径中的 \ 必须用 \\ 的形式。2 Windows的路径中表示文件层级为什么会用反斜杠「\」,而UNIX系统都用斜杠「/」?Windo...转载 2019-12-06 10:01:07 · 5920 阅读 · 2 评论 -
gcc和g++的区别
gcc和g++的区别 我们在编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而c++代码用g++,或者说编译用gcc,链接用g++,一时也不知哪个说法正确,如果再遇上个extern "C",分歧就更多了,这里我想作个了结,毕竟知识的目的是令人更清醒,而不是更糊涂。误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,...转载 2019-12-05 18:58:00 · 7312 阅读 · 0 评论 -
Makefile 入门
一、什么是Makefile一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。这一切都由make 工具 和 Makefile中的规则文件替我们完成。二、Makefi...转载 2019-04-10 14:08:37 · 529 阅读 · 0 评论