可以在Windows,macOS和Linux上安装和运行CLion
和VS不一样,CLion需要自己安装额外的环境支持。类似与java的jdk之类的编译器,比如MinGW。
CLion 支持 GCC, Clang, andMicrosoft Visual C++ 编译器
不同编译器编译出的代码会有效率上的差距,应该统一编译器。
在Windows上,配置CLion需要设置环境:Cygwin,MinGW,WSL或MSVC。环境提供了C和C ++编译器,make实用程序和调试器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DSlByuh4-1614872668123)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p34)]
MinGW
Cygwin
MSVC 如果电脑已经安装过VS CLion会自动检测到
如果你安装了Visual Studio,会自动检测使用Visual Studio的编译环境
安装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是一个跨平台的编译(Build)工具,可以用简单的语句来描述所有平台的编译过程。
输出:各种各样的makefile或者project文件
假如我们有一个深度学习框架的部分工程列表,里面有超过40个互相调用的工程共同组成,一些用于生成库文件,一些用于实现逻辑功能。他们之间的调用关系复杂而严格,如果我想在这样复杂的框架下进行二次开发,显然只拥有它的源码是远远不够的,还需要清楚的明白这几十个项目之间的复杂关系,在没有原作者的帮助下进行这项工作几乎是不可能的。即使是原作者给出了相关的结构文档,对新手来说建立工程的过程依旧是漫长而艰辛的,因此CMake的作用就凸显出来了。原作者只需要生成一份CMakeLists.txt文档,框架的使用者们只需要在下载源码的同时下载作者提供的CMakeLists.txt,就可以利用CMake,在”原作者的帮助下“进行工程的搭建。
有效地描述这些文件之间的依赖关系以及处理命令,当个别文件改动后仅执行必要的处理,而不必重复整个编译过程,可以大大提高软件开发的效率。
Cmake是用来makefile的一个工具:读入所有源文件之后,自动生成makefile。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VWKfmZ6o-1614872668137)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p23)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y4lFq57N-1614872668139)(evernotecid://B5C0B251-D9A0-4888-8EBC-2EEABB405CBC/appyinxiangcom/28500703/ENResource/p65)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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的静态链接库文件。
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)
不可以 JetBrains产品套件中一个成员——Rider可以 。
Rider是基于IntelliJ平台和ReSharper的跨平台.NET IDE。
安装
开始一个工程
JetBrainCLion官方教程
cmake基本语法
cmake使用示例与整理总结
cmakecookbook