私はcmake(3.1)を使用していますが、find_package()関数に渡されたバージョン文字列を別のfind_package()関数が使用する特別なフォーマットのバージョン文字列に変換しようとしています。特に、私はあなたがまだ推測していない場合、これはBoost_VERSIONを必要とするFindBoost.cmakeためである(cmake formatted string出力
"105700"
のように見えるものに
"1.57.0"
のように見える何かを変換しようとしています「105700」の形式)。
私はちょうど私がcmakeの中でこれを行う方法は考えていることを実現しています。固定フィールド幅と先行ゼロでフォーマットされた出力を行うコマンド/マクロ展開/関数はないようですね。 printfの%d%03d%02d
のようになります。それとも?
更新:私はバージョン番号をバングしました。これを反映するように更新されました。
アップデート2:それはFindBoost.cmake内のロジックは、私がここに述べられてきたものよりも、より微妙な理由で私のために失敗しているバージョンのように見えます。
@Torbjörnと@Antonioが指摘しているように、Boost_VERSION
は、入力として機能する自動的に構築された変数ではなく、FindBoost.cmakeのOUTPUT変数です。むしろ、find_package(Boost 1.57.0)
は自動的Boost_FIND_VERSION
と呼ばれる変数、Boost_FIND_VERSION_MAJOR
、Boost_FIND_VERSION_MINOR
、Boost_FIND_VERSION_PATCH
、およびBoost_FIND_VERSION_TWEAK
を作成します。 FindBoost.cmakeはそれからBoost_VERSION
を構成し、ブーストソースのversion.hpp
に表示されるものと同様の形式105700
のバージョン番号と比較します。ここでの私の混乱の原因は、find_package(Boost 1.57.0)
を呼び出すとFindBoost.cmakeがBoost_VERSION
の構築に問題があり、そのバージョンチェックが失敗したようです。その後、私がfind_package(Boost 105700)
を試しても、もうチェックが失敗しないようです。おそらく、version.hpp
形式のバージョンを検出するロジックがあります(つまり、Boost_FIND_VERSION_MAJOR
の全体バージョンですか?)おそらくfind_package(Boost 105700)
が何かを壊しました。
とにかく、cmakeにはまだフォーマットされた文字列出力がないことが分かります。
カウンターは質問:なぜ、あなたは手動で 'Boost_VERSION'を設定する必要がありますか? 'find_package(Boost 1.57.0)'を実行しているときに 'FindBoost'が定義する変数の一つです。 –
あなたが言うことは[documentation](https://cmake.org/cmake/help/v3.5/module/FindBoost.html)には対応していません。 Boost_VERSION *は 'find_package(Boost)'や 'find_package(Boost 1.57.0)'で設定されます。完全なストーリーを知らないと、ここで意味をなさないように見える唯一の変換は、* Boost_MAJOR_VERSION、Boost_MINOR_VERSIONなどの代わりに* 015700 *から* 1.57.0(これはおそらくそれほど難しくありません) – Antonio