OS標準のパッケージ管理を使ってインストールするとバージョンが古いことがある。そこでソースコードからビルドする。だが、この手順がよくわからないのでまとめた。
手順
- ソースコードのダウンロード
- ビルド&インストール
1. ソースコードのダウンロード
- github
- 圧縮ファイル
配布方法はいくつかある。私が見たことあるのは上記2種類。
1-A. github
$ git clone ${GITHUB_URL}
これでカレントディレクトリ配下に指定したURLのソースコードがダウンロードできる。
1-B. 圧縮ファイル
$ wget ${FILE_URL}
wgetの代わりにcurlでも可。これでカレントディレクトリ配下に指定したURLの圧縮ファイルがダウンロードできる。
さらに圧縮を展開(解凍)する必要がある。圧縮形式ごとに以下のようになる。
| 圧縮形式 | コマンド |
|---|---|
| tar.bz2 | tar xf ${FILE_PATH} |
| tar.gz | gzip ${FILE_PATH} |
| zip | unzip ${FILE_PATH} |
| rar | unrar x ${FILE_PATH} |
厄介なことに展開された状態がどうなるかは不定である。圧縮ファイル次第。cd 展開後ディレクトリ名としてビルド作業に行きたいのだが自動化できない……。
さらに文字コード問題がある。Shift-JISやEUCなどが使われて文字化けするとパスの指定すらできず自動化できない……。
2. ビルド&インストール
C/C++言語はビルドからインストールまでに手間がかかる。そこで楽にするツールを使うことがある。だがそのせいで以下のように手順が分岐してしまう。
- すでに
./configureファイルがある ./configureをツールによって作成する- autotools
- cmake
- Meson
2-0. Configure? Makefile? なにそれ
ビルドに必要な工程。
C/C++言語ではソースコードからオブジェクトファイルを作成してリンクすることで実行バイナリファイルを作成する。その手順をmakeファイルに書く。makeコマンドでMakefileの通りにビルドを実行する。
- ソースコードを書く
- makeファイルを書く
これを簡略化するツールがautotools, cmake, Mesonである。しかし、これらを持ってしてもなお複雑になってしまう。そもそもこれらのツールがあることで手順が煩雑化する。つまりC/C++のビルドは超面倒。
2-1. Configure, Makefile
- project/
- configure
- Makefile
プロジェクトディレクトリの中にconfigure, Makefileがあれば、この方法でビルドできる。
ビルドに必要なツールはbuild-essentialパッケージにある。make,gcc,g++等。
$ sudo apt install -y build-essential
configureの内容はシェルスクリプトである。ターミナルで./configure --helpとするとビルドオプションを確認できる。sudo ./configure [option]とするとビルドオプションを指定できる。機能を追加したり削除する指定ができる。以下で説明するmakeの前に行う。
Makefileは独自構文である。オブジェクトファイルの作成やリンクの指示をする。Makefileファイルが存在するカレントディレクトリでsudo makeコマンドを実行するとMakefileの内容が実行される。成功すれば実行バイナリファイルが作成される。
最後にsudo make installとすると所定のディレクトリに配置される。大抵は/usr/localなどである。環境変数PATHが通っているであろうことからコマンド名だけで実行できるはず。これでインストール完了。
ビルド&インストールするコマンドは以下。
cd SomeProject/ ./configure --help sudo ./configure 任意オプション sudo make sudo make install
開発者はMakefile作成に苦労する。そこで後述するツールを使う。
2-1. autotools
Makefileの次に広く使われていると思う。
まずはツールをインストールする。
sudo apt install -y automake sudo apt install -y autoconf
開発者は以下のファイルを作成する。
- Makefile.am
- configure.ac
利用者は以下のコマンドを実行する。
cd SomeProject/ ./autogen.sh autoconf automake ./configure --help sudo ./configure 任意オプション sudo make sudo make install
| コマンド | 出力ファイル |
|---|---|
$ ./autogen.sh |
*.in |
$ autoconf |
configure |
$ automake |
Makefile |
プロジェクトディレクトリに./autogen.shがあればautoconfやautomakeもやってくれるかも? 一応すべて順にやっておく。
2-2. cmake
autotoolsの後発。結局は使いづらいらしい。
2-3. Meson
cmakeの後発。見やすいらしいがチューリング完全でない。
OS, 言語により煩雑化する
実行バイナリのダウンロードにはパッケージマネージャを使う。RaspbianはDebian系なのでapt。OS非依存にnixがある。往々にしてバージョンが古い。そこでソースコードをダウンロードしてビルドする。
ソースコードはgithubなどのコードホスティングサイトにアップロードされていることが多い。ソースコードのダウンロードにはgitコマンドを使う。git cloneやgit pull。
C/C++以外では言語専用パッケージマネージャがある。gitを使わずともインストールできる。
| 言語 | パッケージ管理 |
|---|---|
| python | pip, pip3 |
| Node.js | npm |
| ruby | gem |
| Go | dep, godep, glide |
| C# | NuGet |
バージョンによって機能がなかったり別の名前だったりする。SDK自体のバージョン管理ツールもある。pyenvなど。さらに複数言語の*envを管理するanyenvまである。
これらを駆使して環境を作っていくことになる。環境構築はとてつもなく大変でつまらない苦痛な作業である。
所感
cmake, Mesonのプロジェクトはほとんど見たことがない。cmakeは1回だけあったが良くわからなくてインストールできなかった記憶がある。必要に迫られたら調べる。