2011-12-12 7 views
12

ライブラリーlib1,lib2lib3からなるプロジェクトP(LinuxではC/C++)があります。複数のライブラリーCMakeLists.txt

  • lib1は、私たちは、それぞれのディレクトリPと余分なディレクトリが両方lib1lib2

lib1

  • lib3リンクに別のシステム全体のLIBSに
  • lib2リンクをスタンドアロンリンクされています私たちのライブラリ(so、P/lib1/P/lib2/ ...)。すべての図書館には独自のテストもあります。

    質問:このシナリオの

      、どのように整理するためにしてください
    • CMakeLists.txt
    • マスターbuildディレクトリを1つだけ作成するか、各libに1つずつ作成する必要がありますか?
    • CMakeLists.txtSTATIC vs. SHAREDのリンクを付けることができますか?
  • 答えて

    22

    この場合、単一のビルド/ディレクトリを使用することをお勧めします。 CMakeはおそらく別のlib1、lib2、lib3のディレクトリを生成します。 SHARED対STATICの切り替え

    はCMakeLists.txt組織に関して(add_libraryマニュアルを参照してください)BUILD_SHARED_LIBSフラグを使用して

    を行うことができ、選択はあなた次第です:

    1. ます複数のadd_libraryエントリを持つ単一のCMakeLists.txtを構築できます。 これは単一のCMakeLists.txtを手に入れることができるという利点があります。

    2. lib1、lib2、lib3ディレクトリに分散された複数のCMakeLists.txtにプロジェクトを分割し、でルートcmakelists.txtを使用することができます。この設定の利点は、1つの呼び出し(ビルド/ディレクトリ内)でビルドファイルを生成する方が簡単になることです。 lib3 /とmake/msbuildを呼び出します。 CMakeのは、依存関係が正しく

    例1に構築されていることを確認します:

    project(P) 
    # Setup lib1 
    set (LIB1_SOURCES ...) # Fill in your set of source-files here... 
    add_library(lib1 ${LIB1_SOURCES}) 
    # Do similar for lib2 and lib3 
    target_link_libraries(lib2 lib1) # Indicate that lib1 is needed for lib2 
    target_link_libraries(lib3 lib1 lib2) # Indicate that lib2 and lib1 are needed for lib3 
    

    を実施例2:各サブディレクトリで

    project(P) 
    add_subdirectory(lib1) 
    add_subdirectory(lib2) 
    add_subdirectory(lib3) 
    

    あなたは、あなたのCMakeLists.txtを書きます。例えば。 lib3の場合:

    project(lib3) 
    set(LIB3_SOURCES ...) # Setup the list of sources here. 
    add_library(lib3 ${LIB3_SOURCES}) 
    # You can refer to other libraries which should be available from the root cmakelists. 
    target_link_libraries(lib3 lib1 lib2) 
    
    +0

    大変ありがとうございます。 – Cartesius00

    関連する問題