1

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 の場合は、そのようなフラグがないため、失敗します)。

4

1 に答える 1

1

私はbiiについて何も知りませんが、おそらくBII_BLOCK_TARGETそれが提供するものですか? そして、あなたはそれを何かと一緒に使うことになっていますtarget_link_librariesか?

とにかく、INTERFACEキーワードを試してみてください。

target_compile_features(${BII_BLOCK_TARGET} INTERFACE cxx_auto_type)

http://www.cmake.org/cmake/help/v3.2/manual/cmake-compile-features.7.html

http://www.cmake.org/cmake/help/v3.2/manual/cmake-buildsystem.7.html#transitive-usage-requirements

于 2015-05-05T07:26:32.550 に答える