BOOST_ROOTが無視される

今までBoostは1.58~1.69までしかインストールしていなかったのだが、今日1.71をビルドしてインストールした。そしてこれにハマってCMakeCachebuild/ディレクトリを消してはCMakeを実行しなおすことを繰り返して10分くらい時間を無駄にした。

github.com

リンク先のコメントを訳しておこう。

  • Boost <= 1.69 では、コマンドライン引数か、CMakeのset()か、環境変数からBOOST_ROOTを指定することでBoostをインストールした箇所を指定できた。
  • 世界は ❤🌷🌞😎👍
  • Boost >= 1.70 では、"config mode"が優先され、コマンドラインまたはset()を使って指定した場合一切の警告なしにBOOST_ROOTが無視される。
  • ただしconfigモードでは、/optのような場所にインストールされているBoostも発見する。そのときは、環境変数BOOST_ROOTを与えていても、警告なしに上書きされる。
  • 元の挙動に戻す、つまり"config mode"をぬけ出すには、Boost_NO_BOOST_CMAKE=ONを設定する必要がある。
  • ただし上記のオプションはコマンドライン引数またはCMakeLists.txt内のset()を使って指定される必要があり、環境変数で指定した場合警告なしに無視される。
  • "config mode"でインストールした場所を指定するには、Boost_DIRを使用する。
  • ただし上記のオプションは環境変数set(Boost_DIR <value> CACHE)の形で指定される必要がある。もしコマンドライン引数や通常のset(Boost_DIR <value>)を使用した場合、警告なしに無視される。
  • Boost_ROOTというものがBOOST_ROOTの他に存在する。
    • (後続コメントより)これら2つは異なる。BOOST_ROOTFindBoost.cmakeが参照するもので、Boost_ROOTcmakepolicy CMP0074で指定される挙動、<PACKAGE_NAME>_ROOTを参照する過程で使用される。
  • 世界は💔🔥⛈😕👎

いや、これは結構💔🔥⛈😕👎ではないだろうか。せめてdeprecatedだと教えてほしい……。