有任何关于clion的问题都可以向我留言或私聊(推荐私信,发图更直观反映问题),非24小时在线,注意说的详细点哦
为解决学弟学妹们刚入clion时遇到的难题而创坑,填坑ing…
mac和win版本的clion是有些细小的差别,但总体无大碍,图片中使用的版本随机
注:clion更新了版本,有些功能变了,此处的clion为2020.1.3版的
如果仅是使用clion打题的,最好选2020.1.3及以前的版本
关于30天试用
clion面向学生是免费使用的,可以去jb官网上拿学校邮箱进行学生认证的,具体步骤可以百度一下,这个还是挺多的
听说除了jb官网注册,还可以去github上进行学生认证,而且如果通过了github上的学生认证(挺慢的,到现在都没给我过…),还可以搞到其他优质软件的学生免费试用资格
快捷键
快捷键 | 内容 |
---|---|
两次shift | 万能搜索栏(找不到东西就找它) |
ctrl+shift+s (win) command+, (mac) | 打开clion的环境设置 |
Ctrl + Q | 快速查看函数定义(为了看参数变量、返回值) |
Ctrl + B | 跳转到函数定义所在的头文件 |
Alt + Ins | 召唤生成器 (自动生成构造器等等) |
Ctrl + shift + D | 在cpp文件里添加头文件里指定函数的内部结构 |
Shift + F6 | 多处引用同时更改变量名 |
Ctrl + shift + I | 快速查看定义(为了看具体定义) |
一些关于项目的知识点
首先你要知道一个你写的项目是怎么从静态文本变成可以跑的程序的:
step 1. 预编译
依靠编译器(常见的有gcc,g++)
先将#define这类宏定义都进行文本替换,
处理所有#ifdef这类条件预编译指令,
把#include的头文件包含的具体内容贴到你写的位置,
删掉所有的注释,添加调试用的行号和其他一系列有用的信息
此时你的文件就从源代码变成后缀为.i
的文本文件,此时虽然还不能运行,但体积显然要比原来要大上很多
step 2. 编译
到了这一步编译器就会开始分析你的代码有没有问题,看看能不能进行优化,然后按照规则生成后缀为.s
的汇编代码
step 3. 汇编
将汇编代码转变成二进制机器码,此时将会生成后缀名为.o
的目标文件
step 4. 链接
上述三个步骤是针对一个源文件的,但是我们的工程里.h、.cpp文件的数量非常多,产生许多的目标文件,这一步就是将这些目标文件同其他引用到的第三方库(静态链接库.lib
、动态链接库.dll
)链接起来,最终形成一个可执行文件.exe
这四个步骤,编译器都可以帮我们一步到位,
常见的编译器有很多种,
尽管c++的规则是统一的,但是不同的操作系统对应的不同编译器在c++的具体实现上也有不同的结果
windows下是通过vs的编译器msvc来实现的,linux则依靠的是gcc,
如果我们想在windows机器上翻译linux的c++,那可以试试这个编译器 MinGW (咳咳 我也就只用过这个)
到手clion第一步,先把环境装好,百度MinGW官网下载一个,相信你们可以的 (ง •_•)ง
(先配置环境,然后再去跑项目,过程中有问题看目录找对应的方法)
To新手:怎么跑项目
假设你新建了一个项目,并且只打算运行clion默认自动生成的代码模板
创建成功后,进入clion里,可以看到右上角有一个工具栏
从左到右依次是:
- 构建项目,生成exe用的,要自己手动点击exe,exe在目录文件夹
cmake-build-debug
里可以找到 - 运行项目需要用到的基础环境 Configurations,项目能否正常运行看这里的
- 运行项目,运行前会先构建一遍项目
- Debug,当你设置了断点,方便调试用的(除了多线程,有些版本的clion不方便调试多线程,比如说我的QAQ)
- 没用过
- 没用过
- 停止正在运行的项目
就像老师上课教的那样,每一个项目都只能有main.cpp,程序入口就在这里(当然,想要在main函数之前/之后做些事情也是可以做到的),然后看一下main旁边有没有一个绿色的运行小标(或者上面说的右上角工具栏图里第3个是不是绿色的),如果有则说明系统帮你自动配置好了(一般来说系统都会自动帮你配置好的,只不过一开始会比较慢,可以看看clion底部有没有出现一个进度条,如果有,说明你电脑太慢了,还在配置当中)
如果当你把clion环境配置好了,生成了一个项目后,等了一会儿,发现那个绿色的运行小标标还是灰色的、不能用,那可能是环境还没配置好,请确认下面几个地方是设置好的:
- 确保 settings(快捷键 ctrl + alt + s ) 里
Build,Execution,Depolyment
里的Toolchains
和cmake
是正确的 (具体详见 后文 MinGW配置环境变量) - 确保 工具栏运行环境那里是配置好的
然后就可以运行了
期间遇到的编译问题
MinGW配置环境变量
下载完MinGW,为了能全局使用(也就是除了安装目录之外的地方都可以使用,不是一定要全局设置的,只不过这样更方便)
win界面最底下左下角搜索栏里直接搜环境变量四个字。
找到系统变量里的Path这一行添加MinGW的 bin文件 的路径
NMAKE : fatal error U1077
用了vs的工具链且使用NMAKE(好像是vs特有的?)生成项目。
我没有用过vs的,所以在这只能建议下载MinGW并配置环境变量。
clion的环境Settings里找Toolchains,可以看到vs的工具链后面有default的字样,将MinGW移到最上方,点ok
Test Make run finished with errors more…
This file does not belong to any project target, code insight features might not work properly.
这个问题一般都是因为在创建文件夹的时候没有勾选 Add to targets
所以CMakeList.txt文件里没有加进去
补上去就好
如果新建文件时 Add to targets 里显示的是 no suitable targets
创建的时候运行配置没有建好,显著特征就是右上角出现了 ADD CONFIGURATION...
要么看看clion底部有没有进度条,这个说明clion在后台帮你配置环境,等一下就好
要么自己手动修改 CMakeList.txt 里的内容
然后重新加载CMake,就能配置里看到了
undefined reference to _imp_socket
Q: windows系统下写 socket 时,明明添加了#pragma comment(lib, "ws2_32.lib")
,编译时报错undefined reference to _imp_socket
A: 多方资料表明#pragma comment(lib, "ws2_32.lib")
是微软的vs添加额外库的写法,虽然clion也不报错(CLion添加额外库的方法:在CMakeList.txt
里写link_libraries(库名)
,but在编写socket时也没成功)。
主要是编程的时候缺少了一些步骤ws2_32.lib
没有链接上,导致编译器识别不出来这是啥定义;
微软官方文档显示,在第一步初始化socket阶段,需要添加以下代码
void initSocket(){
WSADATA wsaData;
int iResult; // 用来测试连接结果
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); // WSAStartup 函数用于初始化链接库 WS2_32.dll.
if (iResult != 0) { // 链接库初始化失败
printf("WSAStartup failed: %d\n", iResult);
return 1;
}
return 0;
}
注意:这种方法只适用在clion内编译成功运行,如果是终端里直接编译文件,就需要添加额外的参数
比如使用g++编译文件(g++已经在系统环境变量里设置好了):g++ 文件名 -lwsock32
,默认自动生成a.exe
文件;
如果想要取新名字:g++ 文件名 -lwsock32 -o 新的文件名
ninja: error: manifest ‘build.ninja’ still dirty after 100 tries
Q:第一次运行项目的时候报错ninja: error: manifest 'build.ninja' still dirty after 100 tries
A:clion安装的时候安装到了中文文件夹下,导致cmake无法识别带有中文的路径名,也就没法根据路径找到ninja
CMake
每个clion项目都会有一个CMakeLists.txt
文件,使用的是cmake语言编写,在我们前面讲到的预编译阶段参与到项目中来,这是一个很重要的东西,包括引用的第三方库路径都是在这里设置的
关于如何编写CMakeLists.txt
文件,你需要了解一下这三个东西之间的区别:gcc、make、CMake
接下来再来看看文件里面写了什么
// 还在制作中,,ԾㅂԾ,,
cmake决定了项目整体构建轨迹,不过新手的话一般默认clion自动生成的那个就行了
特殊技巧
工程里并存多个含有 int main() 的cpp文件,运行时只运行其中一个
工程文件下面有一个CMakeLists.txt文件
给每一个含有int main的cpp文件都设置一个新的Configuration配置
ps:
一个exe里只能有一个main函数作为程序执行的入口,这是固定死的
如果你想要两段代码同时运行,可以考虑学学噩梦难度 - 多线程:)
文件输入输出
// 加快c++读写
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
// 本地测试时使用文件读写 提交oj时取消文件读写
#ifndef ONLINE_JUDGE
freopen("1.in", "r", stdin);
freopen("debug.out", "w", stdout);
#endif
菜鸟教程freopen的用法 - https://www.runoob.com/cprogramming/c-function-freopen.html
请注意文件创建的位置
代码模板
设置(Settings /Preferences) 里搜 Live Templates
点ok后就能用了
关于万能头
C++万能头文件<bits/stdc++.h>的内容与优缺点
关于使用:
- win版 MinGW正确安装后可以直接使用(64位)
- macOS 下 CLion 使用 bits/stdc++.h 头文件
启动时出现工程文件夹选项
Ubuntu 远程调试
Q:买了个服务器,为了效率,只有内核无桌面,打代码很不方便,希望可以借远程编译环境,比如说在本地Clion写程序
A:首先确保Ubuntu上有编译程序用的cmake
wget https://github.com/Kitware/CMake/releases/download/v3.22.2/cmake-3.22.2.tar.gz
【wget命令 + 去cmake官网找最新的release安装包复制其链接地址 】
wget 安装得到的文件保存在/
目录下
以及debug用的GDB
apt install gdb
图中需要的CMake路径为\usr\local\bin\cmake
,并非clion默认的\usr\bin\cmake
,可以用whereis cmake
查询所有路径,然后一个个试
版本警告可以忽略不用在意(目前使用过高的版本还没遇到什么问题)
在clion中使用git
前提:事先安装好git(也许依靠插件也行?感觉git的插件挺多的)
Settings->Version Control ->GitHub
添加 github 账户Git -> GitHub -> Share Project on GitHub
将本地的工程克隆到你的仓库里
期间遇到的bug
OpenSSL SSL_read: Connection was reset, errno 10054
Q:共享本地项目到github上,成功创建仓库,但是文件夹没能成功上传到仓库里
A:使用前跑官网登陆一下就行 当时可能网络不太好,重新上传一次就行,Git -> Push...
,一次不够就多来几次…