1.【Linux】CMake源码编译安装教程
2.linux å¨åªä¸ªç®å½ make make install
3.make 的源码执行过程与条件判断
4.win10 cmake源码编译安装opencv(c++,qt)(解决ffmpeg下载失败导致opencv无法处理视频)
5.Linux环境源码安装GCC/CMAKE
【Linux】CMake源码编译安装教程
在Linux环境下进行CMake源码编译和安装的过程简洁明了,适合不同版本管理需求的下载开发者。具体步骤如下:
首先,源码执行卸载操作以清除现有的下载CMake版本。对于使用默认的源码APT安装方式,如需替换为特定版本,下载vue插件源码第一步则为删除当前环境中的源码旧版本,确保下一步的下载操作不会遇到冲突。
接下来,源码访问官方网站下载最新版CMake的下载安装包。对于寻求较新版本(如3.或3.等)的源码用户,需直接下载所需的下载安装包,比如cmake-3..0-rc3.tar.gz。源码下载后,下载使用解压工具将文件解压,源码如通过命令行实现或鼠标右键快速解压,操作无需过于复杂。
为了确保后续操作的顺利进行,需要提前安装依赖项。了解并完成这些预安装步骤能有效避免在安装过程中可能遇到的错误,这些依赖包括但不限于编译工具和其他支持包。安装好依赖后,将文件解压到的目录作为工作区。
进入解压后的目录中,根据官方文档或安装指南,执行编译和构建过程。pacman获取源码成功执行至提示的编译和构建完成阶段后,系统将生成可执行文件,并提供一系列指令引导完成最后的安装步骤。
安装完成后,通过执行特定命令查询CMake版本信息,这一步的输出应当包含版本号等相关信息,确保安装正确无误。至此,CMake源码编译安装流程完毕。
在处理常见错误问题时,如遇到由SSL问题引发的安装失败,可以采用命令进行修复。面对特定类型的错误提示,同样存在相应的解决方案,通过执行适当的命令来解决这些问题,例如在遇到特定日志错误时,按照提示输入相应的命令行指令,进行调试或修正。
linux å¨åªä¸ªç®å½ make make install
makeçå½ç¶æ¯å¨æºä»£ç æ件çç®å½ï¼å 为makeå½ä»¤æ§è¡çï¼å ¶å®æ¯ä¸ä¸ªå为makefileï¼æè æ¯å为Makefileï¼Linuxæ¯å¤§å°åææçï¼çæ件éçå 容ï¼è¿ä¸ªæ件就æ¯ä½ ä¸è½½çæºä»£ç å缩å ï¼è§£ååçç®å½éé¢çï¼å代ç æ件ä½äºåä¸ä¸ªç®å½ã
èmake installæ§è¡çå ¶å®æ¯Makefileéé¢çï¼ä¸ä¸ªå为âinstallâçâç®æ âï¼âç®æ âæ¯Makefileéé¢çä¸ä¸ªæ¦å¿µï¼ï¼è¿ä¸ªâç®æ âåé¢è·çæ¯ä¸æ®µå½ä»¤ï¼å¯ä»¥ç解为âç®æ âåè·äºä¸æ®µshellèæ¬ï¼è¿æ®µå½ä»¤æ§è¡çå°±æ¯æmake好çç¨åºå®è£ å°ç³»ç»çæä½ãå¦æä½ è¦ççå ·ä½installå°äºé£ä¸ªç®å½ï¼å¯ä»¥æ¥çè¿ä¸ªMakefileæ件çå 容ï¼ççinstallè¿ä¸ªâç®æ âä¸å®ä¹çå®è£ ç®å½çå®ï¼âå®âä¹æ¯Makefileä¸çä¸ä¸ªæ¦å¿µï¼ï¼å®æ¯å ¨é¨å¤§åçåéï¼è¿ä¸ªå®ç±»ä¼¼äº$(INSTDIR)è¿ç§åæ ·ã
make 的执行过程与条件判断
通过在 Terminal 中输入以下命令可以将本课程所涉及的所有源代码下载到Linux环境中,作为参照对比进行学习。
命令执行后 WebIDE 的工作区中将会出现一个名为make_example-master 的文件夹。
本章节的源代码位于/home/project/make_example-master/chapter3 目录下,请在 Terminal 中通过 cd 命令切换至该目录后再进行实验学习。
编写 makefile 文件内容如下:
在 makefile 文件中我们定义了两个变量vari_a 与 vari_b,同时我们在执行规则 all 时将他们的darknet源码讲解值打印输出,现在执行 make 命令,观察输出结果。
新增一个文件inc_a,在文件中声明一个变量 vari_b 值为 「vari b from inc_a」。 提供的源代码中已有此文件,内容如下:
修改 makefile 文件,在文件的最后一行通过 include 将 inc_a 包含到 makefile 中。
执行make 命令观察输出结果。
可以发现vari_b 的值被修改了。
我们知道make 是按照顺序一行行读入 makefile。 前面介绍make 的第一阶段是读入所有 makefile 文件,include导入的文件以及环境变量指定的文件。所以解析新修改的 makefile 时,inc_a 应该在第一阶段被解析完毕,所以 vari_b 变量就被 inc_a 修改掉了。
由此说明文件的处理顺序与include 指示符在 makefile 中的位置无关。
到目前为止,我们已经知道 makefile 中的指令都是 shell 指令,那么make 是怎样执行目标对应指令呢? 答案还是 shell。make 会调用 shell 去执行每一条指令。需要注意的是,即便在同一个目标下,每一条指令都是相互独立的。 也就是说 make 会分别调用 shell 去执行每一条指令,而非使用一个 shell 进程按顺序执行所有的易反弹源码命令。
使用cd 命令和 pwd 命令查看两条相邻的命令能否相互产生影响,由此来验证说法的正确性。 在提供的源文件代码中已经有 cd_test.mk 文件,内容如下:
从内容中我们可以知道all 规则是由三条命令构成的,其中 @pwd 表示打印当前绝对路径,但不要显示 pwd 命令,cd .. 表示回到上一层目录。 因此,若三条指令是在一个 shell 进程中顺序执行,那么命令的执行顺序是先打印当前目录的绝对路径,再返回上一层目录并打印上一层目录的绝对路径。若是三条指令是在三个不同的 shell 中执行的,则两次 @pwd 命令的执行结果将会是相同的。
现在执行下面的命令并观察输出结果。
Terminal 的输出结果如图:
说明三条命令是在三个不同的 shell 中执行的。
打印进程id确认指令会被不同的进程执行。 提供的源代码中已有用来测试的代码文件cmd_test.mk, 内容如下:
其中“$$$$”代表的是当前进程id。 所以cmd_test.mk的命令执行过程就是分别打印all目标下两条命令的进程id。 执行make -f cmd_test.mk进行测试:
可以看出两条命令输出的进程 id 是不同的
目标下的每一条命令都是通过不同的shell执行的。
有些状况下,用户希望能够使用cd 命令来控制命令执行时所在的路径,比如 cd 到某个目录下,编译其中的源代码,要实现该操作就必须在一行中写入多条指令。sdk游戏源码
先修改cd_test.mk文件,将三条指令都放在一行,并用“;”隔开。 请注意第三条“@pwd”的指令中,“@”符号要删掉,此符号只用于每一行的开头。 修改后的cd_test.mk内容如下:
执行以下命令:
Terminal 的输出结果如图所示:
说明这三条命令是在同一个进程中被执行的。
在同一行中书写多条指令是一件比较麻烦的事情,尤其是指令较长时,非常不方便阅读和修改。makefile 中可以使用反斜线“\”来将一行的内容分割成多行。 源文件中有一个multi_test.mk脚本,用于测试反斜线的作用,内容如下:
此文件将一条指令分割成 3 行,其中第 1 行和第 2 行组成一条完整的指令,内容与第 3 行指令相似。两条指令的作用也是打印当前执行进程的 id 号。 使用make -f multi_test.mk 命令执行此文件。
Terminal 的输出结果如图:
可以看出执行效果与修改后的cmd_test.mk 文件执行效果一致,说明反斜杠的确能起到连接多行指令的作用。
makefile 中的条件判断语句条件判断语句的基本格式如下:
其中TEXT-IF-TRUE 可以为若干任何文本行,当条件为真时它被 make 作为需要执行的一部分。
makefile 中有else 分支的条件判断语句格式如下:
其中make 在条件为真时执行 TEXT-IF-TRUE,否则执行TEXT-IF-FALSE。
ifeq 用于判断条件是否相等,可以支持以下几种格式:
❗ 注意:ifeq/ifneq 等关键字后面一定要接一个空格,否则 make 会因为无法识别关键字而报错!
提供的代码文件中已有eq.mk 文件,内容如下:
依次执行下面的命令:
Terminal 输出结果如图:
ifneq 支持的格式与 ifeq 相同,同样提供的代码文件中已有 neq.mk 文件,内容如下:
neq.mk 中的条件判断语句使用了 ifneq ... else ... endif 结构。 当 a 不为空时,b 的值与 a 相同,否则 b 为默认值 null。
依次执行下面的make 命令,打印输出 b 在各种情况下的值:
Terminal 输出结果如图:
ifdef 语句的语法格式如下:
它只会判断变量是否有值,而不关心其值是否为空。
现在我们测试ifdef 的用法,以及要怎样理解变量值为空和变量未定义的差别。 提供的源代码文件中已有测试需要的代码文件def.mk,内容如下:
def.mk 文件中先声明了一个变量 a,但并未给其赋值,即变量 a 未定义。 变量 a 又被赋给了变量 b,由于 a 是未定义变量,因此 b 为空值。 make 执行此文件时分别打印变量 a、b、c、d 的值。
现在执行下面的make 命令,观察输出结果。
Terminal 的输出结果如图:
可见对make 来说,它认为 a 属于未定义变量,b 则属于已定义变量。
ifndef语句的格式与 ifeq 相同,逻辑上与 ifeq 相反。 提供的源代码中包含了测试需要用到的代码文件 ndef.mk 文件,它的内容与 def.mk 相似:
现在执行下面的make 命令并查看输出结果。
Terminal 中的输出结果如图所示:
本章学习了make 执行的两个阶段,目标指令的执行细节以及 makefile 中条件执行语句的编写。
win cmake源码编译安装opencv(c++,qt)(解决ffmpeg下载失败导致opencv无法处理视频)
要使用Qt与Windows上的OpenCV,当默认的msvc版本不满足需求时,需要通过源码编译安装,并配合cmake工具。以下是详细的步骤:
首先,下载OpenCV sources版本,同时确保已经安装了cmake编译工具,这里推荐选择对应版本的MinGW版本。在Qt的mingw环境中,需将mingw的bin路径(例如:D:\Programs\Qt\Qt5..\Tools\mingw_\bin)添加到环境变量,验证配置成功可通过在cmd中输入gcc -v。
解压OpenCV到指定位置,创建一个build文件夹。使用cmake-gui,设置源码路径和build文件夹,配置为MinGW Makefiles。初次配置可能遇到问题,如ffmpeg下载失败,这时需要重命名ffmpeg.cmake为ffmpeg.txt,修改其中的下载地址为/。
在cmake-gui中,勾选with_qt和with_opengl,取消opencv_enable_allocator_stats和与python相关的选项。如果需要python支持,可以使用pip安装。配置完成后,再次点击configure并生成makefile,确保所有路径正确。
在build文件夹中,通过mingw-make -j(根据你的CPU核心数设置线程数,例如)开始编译,最后执行mingw-make install。安装后,别忘了将安装路径(如D:\Programs\opencv3.4.\build\install\x\mingw\bin)添加到系统环境变量。
通过这些步骤,你就可以在Qt环境中成功安装并使用OpenCV处理视频了,无需担心ffmpeg下载失败的问题。
Linux环境源码安装GCC/CMAKE
为了在Linux环境下源码安装GCC和CMAKE,我们需要遵循详细的步骤和策略。对于GCC源码,我们可以从GitHub-gcc-mirror/gcc获取4.4.6版本。接下来,进入下载后的GCC源代码目录。
在配置和编译GCC时,首先应该明确指定安装的目录,避免冲突。可能在配置脚本时遇到错误,这时候需要解决依赖项问题。分别安装MPFR、MPC和任何其他必要的依赖库。对于GCC8.3及以上版本,内部集成脚本能够简便地获取这些依赖库。
安装库路径后,再次执行配置文件,加入库路径参数,确保安装的每个步骤顺利进行。配置完成后,整个GCC安装过程即宣告成功。
为了测试GCC是否正确安装,遵循指导进行验证。
CMake的安装同样关键,可以通过直接指定需要的GCC版本来简化安装流程。在CMake命令行参数中指定GCC路径也是可行的。
在运行GCC4.4.6编译的程序时,可能存在系统路径问题,这是因为我们选择的是不替换安装方式。因此,需要额外操作,确保所需的库被正确添加到路径中。
遇到GCC多版本引起的ABI兼容问题时,如果编译链接过程中遇到“undefined reference to"“std::__cxx ***””错误,这提示可能是C++ ABI问题。处理方法是,针对GCC5.1之前版本发布的libstdc++中新增的ABI,通过添加定义-D_GLIBCXX_USE_CXX_ABI=0来解决该问题。
对于GDB版本的问题,特别在GCC.1的使用中,要求C++的编译器,导致了旧版本GDB启动出现Segment Fault。解决办法是升级GDB版本。
附录中提供了一些额外资源,例如Mingw下载,适用于位和位Windows的最新版x_-win-sjlj;CMake下载链接以及GCC的GitHub地址等。遵循这些资源和提示,能够帮助用户顺畅进行Linux环境下的GCC和CMAKE的源码安装与配置。