私のC++プロジェクトには、サードパーティのライブラリ(現在はgitサブモジュール)のソースコードが含まれています。CMakeで外部ライブラリを一度だけ構築する
このライブラリは、add_subdirectory
を使用してメインのCMakelistsによってプロジェクトに追加され、ライブラリはメインターゲットとリンクされます。ここで
が私の現在のcmakeのファイルの縮小版である:
add_subdirectory(foo)
set(FOO_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/libfoo/libfoo.so)
add_executable(target main.cpp)
add_dependencies(target foo)
target_link_libraries(target ${FOO_LIBRARY})
このライブラリは、構築するために長い時間がかかると、私はそのコードを変更しないので、私はそれがビルド構成ごとに(一度しか建て必要)。しかし、私は私のコードをきれいにして再構築すると、ライブラリファイルを消去して再コンパイルします。
私はライブラリのディレクトリにCLEAN_NO_CUSTOM
というプロパティを設定しようとしましたが、ドキュメンテーションによると、カスタムコマンドターゲットでのみ機能します。
CMakeには、このライブラリターゲットを一度だけ生成する必要があるか、またはmake clean
でクリーニングしないように指定できるメカニズムがありますか?
サードパーティのライブラリの*内部*のターゲットを使用していないので、 'ExternalProject_Add'でのアプローチは' add_subdirectory'よりも優れているようです。 'ExternalProject_Add'はクリーンルールを指定していないので、CMakeはライブラリのクリーンアップを試みません。 – Tsyvarev