IDE配置 Clion搭建算法竞赛用的IDE
我的整个项目文件已经上传到github了,直接下载导入就可以直接使用了:
在准备配置自己的IDE之前,首先讲解一下我比较需要的几个功能。
单文件编译运行:有时候需要开很多文件进行单个编译生成对应exe,比如在对拍的时候就要用到。
文件读入和输出:手动复制粘贴样例十分麻烦,不如利用文件进行读入和输出,这样可以方便查看和修改样例。
一键编译运行:既有一键编译运行,又有分离的编译运行按键。
自动生成模板:在打开项目时会有默认模板。
首先解决单文件编译运行。这个可以在Settings-Tools-External Tools里面新建编译运行脚本。
编译脚本如下:
Arguments里面是:
-std=c++14 "$FileName$" -o "$FileDir$/$FileNameWithoutAllExtensions$" -D LOCAL
运行脚本如下:
program里面是:
"$FileDir$\$FileNameWithoutAllExtensions$"
接下来在keymap里面绑定这两个键的快捷键,就可以实现编译了,编译完后会在当前文件的目录内生成一个 文件名.exe文件。
文件读入和输出在上面一步已经考虑了,我们在编译时定义了一个环境变量LOCAL,只需要ifdef就可以了,在模板中插入以下这段话,注意路径名最好写成绝对路径,因为每次编译的文件可以在不同文件夹内,相对路径就会找不到同一个地方。
#ifdef LOCAL freopen("C:\\Users\\onglu\\CLionProjects\\acm\\data.in", "r", stdin); freopen("C:\\Users\\onglu\\CLionProjects\\acm\\data.out", "w", stdout); #endif
自动生成的模板文件可以通过更改Settings-Editor-File and Code Templates-C Source File实现。
不过这里面好像宏定义有另外的格式,可以仿照我的代码改。
#parse("C File Header.h") #if (${HEADER_FILENAME}) #[[#include]]# "${HEADER_FILENAME}" #end #[[#include]]# <bits/stdc++.h> #[[#define]]# all(a) a.begin(),a.end() #[[#define]]# rall(a) a.rbegin(),a.rend() #[[#define]]# endl '\n' #[[#define]]# lson (rt << 1) #[[#define]]# rson (rt << 1 | 1) #[[#define]]# Mid ((l + r) / 2) //#[[#define]]# int long long using namespace std; void work() { } signed main() { #ifdef LOCAL freopen("C:\\Users\\onglu\\CLionProjects\\acm\\data.in", "r", stdin); freopen("C:\\Users\\onglu\\CLionProjects\\acm\\data.out", "w", stdout); #endif ios ::sync_with_stdio(false); cin.tie(0); int Case = 0; cin >> Case; while(Case--) work(); return 0; }
一键编译运行
这里我们需要用到configuration来完成了。
右上角那个绿色箭头旁边的。
进入Edit Configurations,新建一个Custom Build Application
会出现以下的界面,这里面Target就是这个工具要执行的脚本,执行完脚本后,他会运行一个可执行文件,它的路径在Executable中填入。
点击Configure Custom Build Targets,在弹出的选项框里面,按照之前那个方法,添加一个编译工具。
是因为要生成a.exe文件,Arguments要改成:
-std=c++14 "$FileDir$\$FileName$" -o "$ProjectFileDir$\a.exe" -D LOCAL
然后在项目的根目录下创建一个a.exe文件。
然后在刚刚的Executable中选择这个a.exe,接下来只要把configuration切换成你创建的这个东西就可以一键编译运行了。
可以把输入文件和输出文件拖到窗口的右边,十分方便修改输入输出。
但是自定义配置文件一点不好的是不能debug(或者是我不知道怎么debug)。
如果需要用debug功能,就把代码复制到原来的main函数中,然后换成原来的配置就有debug功能了。
不过这时候原来的配置没有定义LOCAL,文件输入输出是不好使的,可以手动输入,也可以取消ifdef解决。