节省编译时间的工具

节省编译时间的工具
Tools save compiling time

最近发现编译C++程序很花时间。
比如说仅仅编译一个用了模版库的程序需要花10秒。
为了加快开发速度,我想找一个能提高单机编译速度的程序。结果如下:

Benchmark
ProgramUserTime (s)SysTime (s)RealTime (s)Memory (kB)
g++-4.9.4137.35u10.11s56.44r1392268kB
clang++-4.093.24u6.56s36.21r949524kB
zapcc++-1.01.81u0.57s33.95r39888kB
ccache-g++ (1st)109.62u9.01s49.43r1392392kB
ccache-g++ (2nd)1.47u0.87s1.67r55832kB

结论:
从编译速度来看,首次编译速度最快的是zapcc(不免费)和clang(免费),耗时~35秒左右,比g++快40%。
重复编译的时候ccache最快,提速10倍以上。

注:表中zapcc的用户时间很短,内容占用少,这是因为它是起动其他进程去真正编译,其他程序的用户时间和内存使用没有被计入。

建立SFTP共享账户

建立SFTP共享账户
Create SFTP share account

做学术的时候往往需要交流数据。目前最安全简便的解决方案是用SFTP传输文件协议。
为此,需要配置Linux服务器,并为学术伙伴建立一个不能登录、只能用SFTP的账号。

下面是步骤:

1. 建立用户组

addgroup --system filetransfer

2. 设定用户目录和相应权限
以用户名username为例:

mkdir /home/username
mkdir /home/username/data
chown root:root /home/username
chown username:filetransfer /home/username/data
chmod 755 /home/username
chmod 700 /home/username/data

权限755可以允许sftp用户登录到其HOME目录/home/username
权限700可以防止上传的数据被其他用户访问

3. 建立用户

useradd -d /home/username -s /usr/lib/sftp-server -M -N -g filetransfer username

-d 指定HOME目录
-s 指定登录shell
-M 不创建HOME目录
-N 不创建以username为名的 用户组
-g 指定user group

4. 配置ssh

打开 /etc/ssh/sshd_config

见到这行之后:Subsystem sftp /usr/lib/openssh/sftp-server
改称:Subsystem sftp internal-sftp
然后在末尾加上:

Match group filetransfer
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

5. 配置登录shell

在/etc/shells末尾加上一行:

/usr/lib/sftp-server

6. 最后重启ssh 服务器就好了

service ssh restart