現在、CMake を使用して C++ プロジェクトを構築しています。CMake は、プロジェクトに不要なライブラリ依存関係を導入することがわかりました。例を挙げると、私のプロジェクトは 1)lib1 2)lib2 3)lib3 と 4)app の 4 つの部分で構成されています。
------lib1---
|----
lib2---
|----
lib3---
|----
app---
のソース コードはapp
、 で作成された動的ライブラリに依存するプログラムを構築しlib3
ます。lib3
ただし、などで作成された動的ライブラリに依存していlib2
ます。VC10 プロジェクトをビルドするために、次の CMake スクリプトをビルドします
。1) ルート CMakeLists:
cmake_minimum_required( VERSION 2.6 )
project (test)
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(lib3)
add_subdirectory(app)
2) lib1 CMakeLists.txt
add_definitions (-DEXP_STL )
add_library(lib1 SHARED lib1.cxx)
3) lib3 CMakeLists.txt
add_definitions (-DEXP_STL )
add_library(lib3 SHARED lib3.cxx)
target_link_libraries(lib3 lib2)
4) アプリ CMakeLists.txt
add_executable(app main.cpp)
target_link_libraries(app lib3)
これらの CMake スクリプトがあれば、VC10 プロジェクトのビルドに問題はありません。ただし、CMake が VC10 のライブラリ間に不要なライブラリ依存関係を導入することに気付きました。たとえば、app
アプリケーション プログラムの場合、1 つのライブラリ、つまり lib3
. ただし、VC10 プロジェクトでは、次の追加の依存関係が追加されていることに気付きました。
..\lib3\Debug\lib3.lib
..\lib2\Debug\lib2.lib
..\lib1\Debug\lib1.lib
ただし、CMake スクリプトでは、lib3
依存関係のみが導入されることになっています。この例のプロジェクトでは問題にならないかもしれませんが、導入された冗長ライブラリが適切な検索パスを要求するため、コンパイル エラーが発生する可能性があります。したがって、これらの不要なライブラリを削除する方法があるかどうか疑問に思っています。ありがとう!