gtest/gmock1.6.0をmake installする

gtestとgmockが1.6.0からmake installできなくなってしまいました。今回は開発者からしたら不本意でしょうが、make installを有効化する方法を説明します。

その前に

とりあえず背景から。先日リリースされたgmockの1.6.0をインストールしようとしたところ、make installが失敗するという現象にぶち当たりました。READMEやその他にもインストール方法は一切記述されていません(リンク方法は書いてありますが、記述に問題があります)。気になって調べたところ、開発者が意図的にmake installを無効化したそうです。

無効化した理由も調べてみました。gtestはコンパイルオプション次第でABIが大きく変わります。gtest/gmockはC++で書かれているので、ヘッダにもコードが多く記述されています。そのため、gtestを使う側でも、gtestインストール時に設定した一部のコンパイルオプションを再度明示的に設定してコンパイルしなければ、libgtestとうまくリンクできなくなります。当然、gmockを使う場合も、gtestとコンパイルオプションを合わせないといけません。この辺をよくわかってない人達が、適当にインストールしたgtestをリンクしようとして問題を起こしまくっており、その問い合わせが結構来るようになったので問題視してmake installを無効化したようです。

make install方法

と言うわけで、事情を知った上で自己責任でmake installする分にはまったく問題がないでしょう。というかできないと不便なんですよ。確かに開発は普通にできますが面倒です。

まず(なぜかzipでしか配布されなくなってしまった)gtest1.6.0.zipを解凍します。その中にMakefile.amというのがあるのですが、そいつを編集します。編集する前に、Makefile.amに書き込み権限がないのでchmodしておきましょう。Makefile.amを開くと、下の方に

# Disables 'make install' as installing a compiled version of Google                                                                                                                       
# Test can lead to undefined behavior due to violation of the                                                                                                                              
# One-Definition Rule.                                                                                                                                                                     

install-exec-local:
        echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system."
        false

install-data-local:
        echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system."
        false

こんなのが書いてあります。これを全部消します。その次に、Makefile.amが置いてあるディレクトリでautoreconfを実行します。後は普通にconfigure、make、make installを実行するだけです。だいぶ大雑把な説明ですが、分からないところは適時ググってください。gmockも似たような手順でインストールできます。

念のため、このページの手順で問題が起こっても絶対にMLで問い合わせないでくださいねー。そういうのを防止するためにmake installが無効化されているので。自己責任です。