2016-08-12 22 views
3

私は他の静的ライブラリに依存するライブラリを構築しています。テストのために、テストバージョンのライブラリの1つを変更する必要があります。私の人生のために、私はCMakeでこれをどうやってやるのか分からない。CMakeビルドのライブラリ依存関係を変更する

私のcmakeの設定には、次のようなものです:

add_library(X STATIC x.cpp) 

add_library(Y STATIC y.cpp) 

add_library(A STATIC a.cpp) 
target_link_libraries(A X Y) 

add_executable(EXE main.cpp) 
target_link_libraries(EXE A) 

これはうまく動作しますが、今、私はこれは簡単な例ですが、私は非常に持っている代わりに、XのTEST_Xを使用する別の実行可能ファイルを作成したいですレガシーシステムからの複雑な依存関係

したがって、別のライブラリ(XではなくTEST_X)にリンクされた新しい実行ファイルを作成するにはどうすればよいですか?

答えて

2

私が正しく理解している限り、実行可能ファイルTEST_EXEはライブラリAに依存しますが、ライブラリXではなくTEST_Xに依存しています。

私は新しい実行TEST_EXEにこの新しいTEST_ATEST_XしていないXに応じて、新しいライブラリターゲットTEST_Aを作成し、使用するよりも、他の方法が表示されない:

add_library(TEST_X STATIC test_x.cpp) 
add_library(TEST_A STATIC a.cpp) 
target_link_libraries(TEST_A TEST_X Y) 
add_executable(TEST_EXE main.cpp) 
target_link_libraries(TEST_EXE TEST_A) 
+0

はい、これは正しい、このソリューションは動作します...しかし、私余分なTEST_Aライブラリを定義する必要はありません。 –

+0

'X'ライブラリを条件付きでラップして、実際のバージョンとして_test_バージョンを定義するか、あるいはその逆の場合はどうしますか?私。名前の変更なしに、ただの他の情報源。 –

1

あなたはNEWCMP0022ポリシーを設定した場合"INTERFACE_LINK_LIBRARIESはリンクインターフェイスを定義しています。"これにより、後でINTERFACE_LINK_LIBRARIESターゲットプロパティを使用してライブラリ依存関係を操作することができます。

だからあなたの場合には、あなたがXAの依存関係を削除することができますし、あなたの実行可能なターゲットに直接希望のライブラリの依存関係を追加します。

cmake_minimum_required(VERSION 2.8) 
project(ChangeLibDeps) 

cmake_policy(SET CMP0022 NEW) 

add_library(X STATIC x.cpp) 
add_library(TEST_X STATIC test_x.cpp) 

add_library(Y STATIC y.cpp) 

add_library(A STATIC a.cpp) 
target_link_libraries(A X Y) 

get_target_property(_libs A INTERFACE_LINK_LIBRARIES) 
list(REMOVE_ITEM _libs X) 
set_target_properties(A PROPERTIES INTERFACE_LINK_LIBRARIES ${_libs}) 

add_executable(EXE main.cpp) 
target_link_libraries(EXE A X) 

add_executable(TEST_EXE main.cpp) 
target_link_libraries(TEST_EXE A TEXT_X) 
関連する問題