をエクスポートせずに、静的な内部ライブラリにリンク:cmakeの:私はこのような構造を持つプロジェクト持ってそれを
/path/to/my/project
├── CMakeLists.txt
├── internal-libs
│ ├── internal-lib1
├── libs
│ ├── lib1
│ ├── lib2
lib1
は、静的ライブラリです。
lib2
は静的ライブラリです。
internal-lib1
は静的ライブラリです。
lib2は、lib2とinternal-lib1に静的にリンクします。 lib1
とlib2
がエクスポートされますが、internal-lib1
が残されます。リンケージのために、私が持っている:
target_link_libraries(lib2 PRIVATE internal-lib1)
target_link_libraries(lib2 PRIVATE lib1)
私の理解では、私は静的および個人リンクしていますので、内部LIB1に関するすべての情報はLIB2に含まれることを、私は内部LIB1をエクスポートする必要がないということです外の世界に。
はしかし、私はクライアントプログラムでそれを使用しようとすると、私はエラーを取得する:私の生成エクスポート設定ファイルの
/usr/bin/ld cannot find -llib-internal1
collect2: error: ld returned 1 exit status
、私が持っている:
# Create imported target lib2
add_library(lib2 STATIC IMPORTED)
set_target_properties(lib2 PROPERTIES
INTERFACE_LINK_LIBRARIES "$<LINK_ONLY:lib1>;**$<LINK_ONLY:internal-lib1>**"
)
# Create imported target lib1
add_library(lib1 STATIC IMPORTED)
を私が誤解アム静的リンクか、セットアップに何か問題がありますか?私はcmake 3.2.2を使用しています。すべての私のターゲットはプライベートです。私はなぜINTERFACE_LINK_LIBRARIES
にエントリがあり、LINK_ONLYが何を意味するのか分かりません。
p.s.実際にはlib1とlib2は共用ライブラリであると考えられていますが、静的なバージョンは動作しません。ここでは簡単にするために、エクスポート可能なライブラリの静的なケースについて説明します。
私は感謝を見る。私は基本的に、静的ライブラリの単純なケースでは、彼のメソッドが不必要に複雑だと思ったので、ここで試行されているものを実行しようとしていました(http://stackoverflow.com/a/11448878/4376555)。しかし、私はあなたのソリューションはさらにハッキーだと思う。 – ShS