次のディレクトリ構造があるとしましょう。
projects
|
+--lib1
| |
| +-CMakeFiles.txt
|
+--lib2
| |
| +-CMakeFiles.txt
|
+--test
|
+-CMakeFiles.txt
lib1 / CMakeFiles.txt:
cmake_minimum_required(VERSION 2.0)
add_library(lib1 STATIC lib1.cpp)
lib2 / CMakeFiles.txt:
cmake_minimum_required(VERSION 2.0)
add_subdirectory(../lib1 ${CMAKE_CURRENT_BINARY_DIR}/lib1)
add_library(lib2 STATIC lib2.cpp)
target_link_libraries(lib2 lib1)
test / CMakeFiles.txt:
cmake_minimum_required(VERSION 2.0)
project(test)
add_subdirectory(../lib1 ${CMAKE_CURRENT_BINARY_DIR}/lib1)
add_subdirectory(../lib2 ${CMAKE_CURRENT_BINARY_DIR}/lib2)
add_executable(test main.cpp)
target_link_libraries(test lib1 lib2)
つまり、それらの両方にlib2
依存しlib1
、依存しています。test
(技術的に静的なライブラリは「リンク」しないことを私は知っていますが、それは単なる例です。)
問題は、現在の設定では、lib1が2回コンパイルされることです。1回目は「test」ビルドディレクトリ内にあり、2回目は「test / build_directory / lib2/build_directory」内にあります。それは避けたいです。
lib1、lib2、またはその両方への依存関係を(add_subdirectoryを使用して)他の場所にあるプロジェクトに追加できるようにしたい。したがって、CMakeFilesを移動することはできません。また、ライブラリを何度もコンパイルすることは避けたいと思います。
どうやってやるの?
プラットフォーム:CMakev。2.8.4およびWindowsXP SP3
トップレベルのCMakeLists.txtファイルはオプションではありません。クリーンなトップレベルのディレクトリを維持し、他の場所にある他のプロジェクトにライブラリを含めることができるようにするためです。Windowsなので、「システム全体にパッケージをインストール」することはできません。コンパイラをその場で切り替える機能を失いたくありません。異なるコンパイラで構築されたユーティリティライブラリは、異なるCランタイムライブラリ/ ABIを使用するため、互換性がなくなります。