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回だけあったが良くわからなくてインストールできなかった記憶がある。必要に迫られたら調べる。