すでにUbuntuを使っている、または、仮想環境にUbuntuを用意してある、という場合には、今回CコンパイラとしてLLVM Clangを使用するので、apt-getでclangをインストールする。
$ sudo apt-get install clang
作業環境がノートPCである場合など、メモリ容量やプロセッサの能力の問題で、こうしたリッチなデスクトップ環境を仮想環境に構築するのが難しいということもある。このようなときは、PC-BSDをインストールするときにKDEではなくより軽量なデスクトップ環境を選択してインストールするとよい。
あるいは、多少セットアップは面倒になるが、FreeBSDをインストールしてコンソールだけで利用するという方法もある。FreeBSDをコンソールだけで利用する方法なら、仮想マシンのメモリには128Mbytes程度割り当てておけばよく、「多機能なコマンドプロンプト」のように扱える。
FreeBSDは、PC-BSDのインストーラからインストールできるので、インストールには特に問題ないだろう。インストール時にPC-BSDではなくFreeBSDを選択すればよいのだ。ただし、インストール時はGUI環境が起動するので、最初だけはメモリを512Mbytes以上割り当てておく必要がある。インストールが終わったら128Mbytesまで落として利用する。
最初のセットアップだけ軽く説明しておく。仮想環境でFreeBSDのコンソールを使うなら、もう割り切ってrootでログインして作業してしまってもよいだろう。環境を壊したら、またインストールし直せばよい。まず、FreeBSDのコンソールをインストールしただけでは、ネットにつながらないので、次の1行を/etc/rc.confに追加してシステムを再起動(shutdown -r now)する。
ifconfig_em0="DHCP"
次に、アプリケーションのインストールのためにportsnapコマンドでPorts Collectionを取得する。
# portsnap fetch extract update
次に、Vimをインストールする。
# cd /usr/ports/editors/vim/ # make install clean
フル機能のVimは、GUI関連も含め多くの機能を備えているので、ビルドに結構時間がかかる。そんなに多くの機能はいらないという場合は、VimではなくVim Liteを次のようにインストールする。
# cd /usr/ports/editors/vim-lite/ # make install clean
ここまでできたら、後は~/.vimrcを作成するなどして、同じように操作すればよい。
今回からしばらくは、C言語のコンパイラとしてLLVM Clangを使用する。OSSで公開されているC言語コンパイラとしてはGNU Compiler Collection(GCC)が最も広く普及しており、これにLLVM ClangとOpen64が続いている。
LLVM Clangは、特にここ数年で一気に知名度を上げたコンパイラ/コンパイラインフラストラクチャで、C/C++言語のみならず、さまざまなアプリケーションやシステムにおける基盤技術として採用されている。GCCよりも後発のコンパイラ/コンパイラインフラストラクチャであり、ライセンスがBSD Licenseという採用のしやすさもこうした状況を後押ししている。大手ベンダもLLVMを活用したプロダクトを開発している。
この連載でLLVM Clangを採用するのは、このコンパイラのエラー出力がとても分かりやすいからだ。C言語の初学者は、コンパイラが出力する意味不明なエラーメッセージにまいってしまうことがある。GCCの出力するエラーメッセージは直感的とは言いにくい。その点、Clangは分析がしっかりしており、エラーメッセージが理解しやすい。挫折することなく、C言語の学習を進められるということは重要だ。
構築した環境でCプログラムを作成し、コンパイル、実行までしてみよう。C言語について細かいことを知らなくても大丈夫なので、そのまま試してみてほしい。まず、次のように作業ディレクトリを作成し、/usr/src/usr.bin/true/true.cというソースコードをhello.cとしてコピーする。
% mkdir vimwork % cd vimwork % cp /usr/src/usr.bin/true/true.c hello.c % vim hello.c
true.cはtrue(1)コマンドのソースコードだ。実行すると真値を返して終了するだけのコマンドで、while文などの繰り返し条件などで使われる。ソースコードは次のようになっているが、ライセンスとコメントがほとんどだ。分かりにくいので、下5行を除いてすべて削除する。
/* * Copyright (c) 1988, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD: head/usr.bin/true/true.c 216370 2010-12-11 08:32:16Z joel $ */ #ifndef lint static const char copyright[] = "@(#) Copyright (c) 1988, 1993\n\ The Regents of the University of California. All rights reserved.\n"; #endif /* not lint */ #ifndef lint static const char sccsid[] = "@(#)true.c 8.1 (Berkeley) 6/9/93"; #endif /* not lint */ int main(void) { return 0; }
ライセンスとコメントを削除したプログラム本体は、次のようにシンプルなソースコードになっている。
int main(void) { return 0; }
コンパイルは次のように実行する。-oで、出力するバイナリファイルの名前を指定している。このコマンドを実行すると“hello”というバイナリファイルが生成される。実行しても成功するだけのプログラムなので、何の出力もなく終了する。最も簡単なプログラムだ。
% clang -o hello hello.c % ./hello %
Copyright © ITmedia, Inc. All Rights Reserved.