CLion及Cmake安装教程

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)]

  • 下载编译器
  1. MinGW

  2. Cygwin

  3. MSVC 如果电脑已经安装过VS CLion会自动检测到

  • 配置构建工具链(设置 -> 构建,执行,部署 -> 工具链):这一步是在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编译才可以使用

  1. 安装cmake
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ih0ckS0-1614872668128)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p37)]

  2. 下载opencv3.4.0

  3. 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)]

  4. 安装成功后可以看见opencv的版本等信息
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irfpGsh7-1614872668135)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p29)]

  5. 使用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。

参考文献

安装
开始一个工程

JetBrainCLion官方教程
cmake基本语法
cmake使用示例与整理总结
cmakecookbook

你可能感兴趣的:(BugCookies)