1.About CLion
CLion是跨平台的IDE
可以在Windows,macOS和Linux上安装和运行CLion
可以使用哪些编译器和调试器?
-
和VS不一样,CLion需要自己安装额外的环境支持。类似与java的jdk之类的编译器,比如MinGW。
-
CLion 支持 GCC, Clang, andMicrosoft Visual C++ 编译器
-
不同编译器编译出的代码会有效率上的差距,应该统一编译器。
需要提前安装的东西
在Windows上配置CLion
在Windows上,配置CLion需要设置环境:Cygwin,MinGW,WSL或MSVC。环境提供了C和C ++编译器,make实用程序和调试器
- MSVC编译器
CLion支持Visual Studio 2013、2015、2017和2019附带的Microsoft Visual C ++编译器。
在macOS上配置CLion
- 在macOS上开始CLion安装之前,请确保您的计算机满足硬件要求,并且macOS的版本为10.9.4+。
- 在macOS上,必需的工具可能已经安装。
2.安装 CLion
2.1 Win10环境
- JetBrains官网下载Clion 官网
首次运行:登录帐号进行激活授权,偏好配置。学生可以使用edu邮箱注册JetBrains帐号,然后可以免费使用JetBrains家族所有IDE的ULTIMATE版本,到期还可以申请)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DSlByuh4-1614872668123)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p34)]
- 下载编译器
- 配置构建工具链(设置 -> 构建,执行,部署 -> 工具链):这一步是在CLion中配置构建需要的工具的路径。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yk0FHiZR-1614872668126)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p36)]
打开CLion,左上角File-Settings-Build-Toolchains
如果你安装了Visual Studio,会自动检测使用Visual Studio的编译环境
2.2 IOS环境
- Mac系统测试时默认选择了IOS系统自带的Clang编译器
3.配置opencv
opencv需要经过cmake编译才可以使用
-
安装cmake
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ih0ckS0-1614872668128)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p37)] -
下载opencv3.4.0
-
cmake编译opencv
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yb3PfcEh-1614872668132)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p26)]
4.打开终端 运行make指令编译
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IYJd1glt-1614872668134)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p27)]
时间有点久等待ing…
5.sudo make install 加入系统依赖库中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opw0jdGv-1614872668135)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p28)] -
安装成功后可以看见opencv的版本等信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irfpGsh7-1614872668135)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p29)] -
使用opencv 在工程cmakelist文件中配置即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XdCIoKAl-1614872668136)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p30)]
移植
cmake
什么是cmake
-
CMake是一个跨平台的编译(Build)工具,可以用简单的语句来描述所有平台的编译过程。
-
输出:各种各样的makefile或者project文件
-
假如我们有一个深度学习框架的部分工程列表,里面有超过40个互相调用的工程共同组成,一些用于生成库文件,一些用于实现逻辑功能。他们之间的调用关系复杂而严格,如果我想在这样复杂的框架下进行二次开发,显然只拥有它的源码是远远不够的,还需要清楚的明白这几十个项目之间的复杂关系,在没有原作者的帮助下进行这项工作几乎是不可能的。即使是原作者给出了相关的结构文档,对新手来说建立工程的过程依旧是漫长而艰辛的,因此CMake的作用就凸显出来了。原作者只需要生成一份CMakeLists.txt文档,框架的使用者们只需要在下载源码的同时下载作者提供的CMakeLists.txt,就可以利用CMake,在”原作者的帮助下“进行工程的搭建。
什么是makefile?
- 很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作
- 特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。
- makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
为什么使用makefile?
有效地描述这些文件之间的依赖关系以及处理命令,当个别文件改动后仅执行必要的处理,而不必重复整个编译过程,可以大大提高软件开发的效率。
CMake和makefile
Cmake是用来makefile的一个工具:读入所有源文件之后,自动生成makefile。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VWKfmZ6o-1614872668137)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p23)]
cmake基本语法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RKvKlXl4-1614872668138)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p39)]
#指定cmake的最小版本
cmake_minimum_required(VERSION 3.2)
#制定项目的名称
project(Rigel)
file(GLOB SOURCES
*.h //*号对应具体的文件名
*.cpp
)
#示CMake创建一个新目标:可执行文件hello-world。这个可执行文件是通过编译和链接源文件hello-world.cpp生成的。
add_executable(hello-world hello-world.cpp)
瑕疵生成代码移植举例
写CMakeList.txt,配置项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y4lFq57N-1614872668139)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p65)]
include opencv相关库 即可生成
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FhtTt7sI-1614872668140)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p66)]
效果图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fMteA4N8-1614872668140)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p67)]
如何生成动态链接库
在代码确保没报错的前提下,只要写好Cmakelist文件就可以进行Build,生成链接库了。
add_library(DEMOProject SHARED Afile.cpp Afile.hpp)有这句话就能够生成出dll动态链接库了
add_library( [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[source1] [source2] […])
该指令的主要作用就是将指定的源文件生成链接文件,然后添加到工程中去,[STATIC | SHARED | MODULE]指定生成链接库的类型,指定STATIC,SHARED,或者MODULE参数用来指定要创建的库的类型。STATIC库是目标文件的归档文件,在链接其它目标的时候使用。如果什么都不写那么就会生成.a文件,也就是Linux的静态链接库文件。
如何写qt
1.下载相应的包和库
2.配置CMakeLists.txt即可
cmake_minimum_required(VERSION 3.0)
project(test)
指定c++标准的版本
set(CMAKE_CXX_STANDARD 17)
自动调用moc,uic,rcc处理qt的扩展部分
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
设置Qt5的cmake模块所在目录,如果不设置将使用系统提供的版本
QT_DIR和QT_VERSION是指定了qt安装目录和版本的环境变量
如果你使用了系统的cmake,那么会优先使用系统提供模块,因为cmake会优先搜索CMAKE_SYSTEM_PREFIX_PATH
如果你不想让cmake优先搜索系统目录(会导致编译使用系统安装的qt而不是我们配置的),需要提示find_package命令
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} E N V Q T D I R / ENV{QT_DIR}/ ENVQTDIR/ENV{QT_VERSION}/gcc_64/lib/cmake)
找到对应的qt模块,名字为qmake中QT += 中的name首字母大写后加上Qt5前缀
例如core为QtCore,你也可以去${CMAKE_PREFIX_PATH}的目录中找到正确的模块名
如果不想使用系统qt,这样写(注意NO_DEFAULT_PATH参数,它会让find_package跳过系统目录的查找):
find_package(Qt5Widgets REQUIRED NO_DEFAULT_PATH)
如果你想要使用系统自带的qt,这样写:
find_package(Qt5Widgets REQUIRED)
将当前目录的所有源文件添加进变量
aux_source_directory(. DIRS_SRCS)
通常这样设置就可以,如果你的项目包含qrc文件,那么需要将它们单独添加进来
例如add_executable(test ${DIRS_SRCS} resources.qrc)
add_executable(test ${DIRS_SRCS})
把对应Qt模块的库链接进程序
target_link_libraries(test Qt5::Widgets)
可以写c#吗
不可以 JetBrains产品套件中一个成员——Rider可以 。
Rider是基于IntelliJ平台和ReSharper的跨平台.NET IDE。