clang小技巧:加快编译速度

编译整个llvm会花费很长的时间,如果你只关心clang,则每次修改完代码之后需要make的时候,可以使用

make ONLY_TOOLS="clang"

只编译clang,从而大大减少编译时间。

进一步,还可以使用

make ONLY_TOOLS="clang" BUILD_CLANG_ONLY=YES

只编译器clang本身,不编译clang的unit test。

使用git-shell来限制用户ssh登陆

虽然git是分布式的版本管理系统,但对于团队项目开发,通常还是会在单独的服务器上创建一个git server。类似于svn,git server也有好几种配置方式。详情,可以参见git的文档http://git-scm.com/book/en/v2。这里,主要是从上述文档中摘出一部分,说明一下git-shell的用处。

假如,大家都使用ssh的方式来访问:

$ git clone git@10.3.0.99:project.git

这就意味者,访问者具有权限可以ssh登陆到服务器上:

$ ssh git@10.3.0.99

出于安全的考虑,我们最好限制用户只能进行git push/pull,但无法登陆。这可以使用git-shell来完成。

查看一下git-shell的位置:

$ which git-shell
/usr/bin/git-shell

将git-shell的路径添加到/etc/shells文件中,然后修改git用户的shell:

$ sudo chsh git

设置为/usr/bin/git-shell。这样,如果再使用ssh方式登陆,则会报错:

$ ssh git@10.3.0.99
git@10.3.0.99's password: 
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-35-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to 10.3.0.99 closed.

小技巧:追溯历史开发信息

在gcc中,如果想查看以往的代码变动信息,可以查看相应源码目录下的ChangeLog文件。ChangeLog有很好的格式要求和内容规范,并且也要经过review。这虽然对于Patch提交者来来说显得有些繁琐,但当你需要查看历史开发信息的时候,就充分感受到了它的重要性了。

在LLVM中,没有ChangeLog文件,LLVM的开发者认为查看svn log就足够了。但是,日志信息的格式和内容比较随意,而且,一般还需要手动导出到文件中进行查看。使用svn命令时,建议使用svn log -v命令,这个-v选项,可以打印出相关的文件变动信息,可以帮助你更好的追溯代码变动情况。

一键编译安装gcc

今天看到一篇文章,作者通过一个shell脚本和一个Makefile,可以自动下载需要的所有安装包并且编译gcc

$ # Download the scripts using wget.
$ mkdir /opt/gcc-4.9.2
$ cd /opt/gcc-4.9.2
$ wget http://projects.joelinoff.com/gcc-4.9.2/bld.sh
$ wget http://projects.joelinoff.com/gcc-4.9.2/Makefile
$ chmod a+x bld.sh
$ make
[output snipped]
$ # The compiler is installed in /opt/gcc-4.9.2/rtf/bin

我试了一下,果然很方便。只要有一台可以联网的机器就可以了。感兴趣的朋友可以试一试。

P.S.:
(1)编译libiconv时可能会有“'gets' undeclared here“错误,请参考这篇文章
(2)如果机器是64位的,但是缺少32位的库文件。这样在编译gcc时会出现错误:“configure: error: I suspect your system does not have 32-bit developement libraries (libc and headers). If you have them, rerun configure with –enable-multilib. If you do not have them, and want to build a 64-bit-only compiler, rerun configure with –disable-multilib.”。提示需要配置“--disable-multilib”。

如何卸载gdb?

前几天安装最新的gdb过程中出了点问题,想卸载一下。结果执行“make uninstall”命令后,出现下面的结果:

bash-3.2# make uninstall
the uninstall target is not supported in this tree

看起来,gdb不支持直接用“make uninstall”命令卸载,那么如何卸载它呢?我在gdb mailing list里问了一下,收到了Doug Evans回信

Yikes.

A clumsy workaround is to cd into each subdir in the build tree and do
make uninstall there.

只能是进入每个子目录,分别执行“make uninstall”命令了。

后来,他又在一封单独的信中提到,他已经提交了bug,看看会不会有人做一下改进了。