CMake get_target_property
に問題があります。後で定義されたライブラリで実行され、エラーが返されます。 cppunit_addon
がUT_pal_logger
で使用されるいくつかのヘッダをもたらし後で定義されたターゲットでget_target_property()を呼び出す
add_library(cppunit_addon STATIC ${SOURCES})
target_include_directories(cppunit_addon PUBLIC Include)
注こと:他のファイルで
add_library(UT_pal_logger OBJECT ${SOURCES})
target_add_interfaces(UT_pal_logger cppunit_addon)
がある:
function(target_add_interfaces TARGET OTHER_TARGETS)
foreach(OTHER_TARGET ${OTHER_TARGETS})
get_target_property(TMP_INCLUDES ${OTHER_TARGET} INTERFACE_INCLUDE_DIRECTORIES)
if(TMP_INCLUDES)
target_include_directories(${TARGET} PUBLIC ${TMP_INCLUDES})
endif()
endforeach(OTHER_TARGET)
endfunction()
とこれは私のコードです。
これはメッセージで失敗します。
CMake Error at Scripts/CMake/target_add_interfaces.cmake:22 (get_target_property):
get_target_property() called with non-existent target "cppunit_addon".
Call Stack (most recent call first):
.../logger/CMakeLists.txt:36 (target_add_interfaces)
しかし、これは設定して、うまく構築します。すべてが解析され、get_target_property
にはないされるまで
add_library(UT_pal_logger STATIC ${SOURCES})
target_link_libraries(UT_pal_logger cppunit_addon)
--->target_link_libraries
は何とか待ちます。また、これはdocumented次のとおりです。
このコマンドは、これまで作成した任意のターゲットのプロパティを取得することができます。
これを修正するために、add_directory
コマンドの順序を変更することもできます。しかし、これはクリーンな解決策ではありません。すべてが解析されるまで、どうすればget_target_property
を待つことができますか?
:
があれば成功し、次のコードスニペットをテストしました。ですから、あなたが 'target_add_interfaces()'関数を実現しようとしていることを私が理解していないことは認めていますか?リンク依存関係がある場合、問題は解決されます(パブリックインクルードディレクトリは自動的に伝播されます)。 – Florian
@Florian、彼は* OBJECT * libraryのインクルードディレクトリを追加しようとしています:https://stackoverflow.com/questions/47831517/cmake-add-interfaces-but-do-not-link。 – Tsyvarev