biicode ブロックでtarget_compile_featureを使用しようとしています。私が知る限り、これは現在、特定の C++ 標準バージョンを cmake に要求する最良の方法です。コンパイルに追加するフラグ (存在する場合) を認識し、使用されているコンパイラがそうでない場合はエラーで失敗するためです。私たちが要求した機能をサポートします。
この行を非常に単純な CMakeLists.txt に追加しました (biicode のブログのブーストの例からの変更はありません)。
target_compile_features(${BII_BLOCK_TARGET} PRIVATE cxx_auto_type)
bii ビルドを実行すると、次のエラーが表示されます。
CMake Error at bii_test/alchemist/blocks/sennin/deckbox_loader/CMakeLists.txt:13 (target_compile_features):
target_compile_features may only be set INTERFACE properties on INTERFACE
targets
PUBLIC または PRIVATE スコープで cxx_auto_type を設定すると、まったく同じ結果になります。
CXX_STANDARDと CXX_STANDARD_REQUIREDの使用を避けたいのは、1 つ目はソフト リクエスト (要求された標準がサポートされていない場合でも cmake でコードのビルドを試みることができる) であり、2 つ目は何らかの形で完全なサポートをリクエストする必要があることを強制するためです。全体が要求された標準標準 (Visual Studio の場合は、そのようなフラグがないため、失敗します)。