3

CMake を使用する 2 つのプロジェクトがあります。プロジェクト A は、プロジェクト B にリンクされる静的ライブラリをビルドします。問題は、プロジェクト A からソース ファイルを変更して両方のプロジェクトをビルドすると、プロジェクト B が自動的に再度リンクされないことです。プロジェクト A (静的ライブラリ) からの出力をプロジェクト B に追加するにはどうすればよいですか?

編集:これが私の問題の例です:

ProjectA CMakeLists.txt:

cmake_minimum_required (VERSION 2.6)
PROJECT(PROJECTA)

ADD_LIBRARY(projectA STATIC "src/foo.cpp")

ProjectB CMakeLists.txt:

cmake_minimum_required (VERSION 2.6)
PROJECT(PROJECTB)

set(PROJECTA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../ProjectA)
include_directories(${PROJECTA_DIR}/include)

link_directories(${PROJECTA_DIR}/build)

ADD_EXECUTABLE(projectB "src/main.cpp")
target_link_libraries(projectB projectA)

問題を再現するには:

  1. 両方のプロジェクトをビルドします (ProjectA を最初にビルドする必要があります)。
  2. ProjectA/src/foo.cpp を変更
  3. ProjectA をビルドします (libProject.a が更新されます)。
  4. ProjectB をビルドします (実行可能ファイルを新しい libProject.a にリンクしません。代わりに、変更が行われていないと想定し、何もしません)
4

1 に答える 1

7

私のコメントを答えに変えます。

通常、CMake プロジェクトが連携しなければならない場合、 を使用してそれらを同じビルドシステムの一部にすることが有益add_subdirectory()です。そうすれば、CMake はターゲット間の依存関係を追跡したり、論理ターゲット名への参照を自動的に解決したりできます。

それができない場合は、少なくとも削除link_directories()して、代わりに のライブラリへのフル パスを使用する必要がありますtarget_link_libraries()。の使用link_directories()は一般的にお勧めできません。問題が発生することが知られています。

于 2013-03-15T17:32:26.693 に答える