2016-06-24 17 views
2

私は3 CMakeLists.txtを使用して、プロジェクトがあります:CCMakeの不要な依存関係

  • CMakeLists.txt は私の実行可能で、静的libにあり、その
  • CMakeLists.txt Bに依存します
  • CMakeLists.txt 静的libにあり、外部LIBに依存に依存

はCMakeLists.txt C Iにおいてtarget_link_librariesを(使用用いBに対して私の依存性を指定する)及びIはに対してBの依存性のために同じことを行います。 In CMakeLists.txt 私は外部のlibに対して依存関係を指定します。

The CMakeLists.txt and dependencies

私はこれが動作するように期待

しかしCは、実際には、リンク時に文句を言うと、私はそれが外部のlibに対するCに依存関係を指定することで、仕事を得ることができます。

外部libは動的(.soファイル)であることに注意してください。

これは私には奇妙に見えますか?誰が何が起こっているのか理解していますか?

ありがとう、

アントワン。

答えて

1

これでうまくいくはずです。 CMakeLists.txtにバグがあります。

見る本物の依存関係

でそれを確認してください:

cmake .. --graphviz=deps.dot 
xdot deps.dot 

それはcmakeのは、見ている依存関係ツリーのきれいな画像が表示されます。

あなたはxdotを持っていない場合は、PNGへのエクスポート、それを:

dot -Tpng deps.dot -o deps.png 
firefox deps.png 

ライブラリが見つかりませんか?

もう1つの可能性は、外部ライブラリが実際には見つからないことです。単にライブラリ名を置くのではなく、find_libraryを使用します。

find_library(FAIL failingmadly) 
if (NOT FAIL) 
    message(FATAL_ERROR "Couldn't find the failingmadly library") 
endif() 
target_link_libraries(my_lib_a ${FAIL}) 

位置独立コードを?

静的ライブラリと共有ライブラリの依存関係をリンクするときの別の可能性が、PICの苦情です。あなたは何かをコンパイルする前にcmakeでこれを追加することができます:

add_definitions(-fPIC) 

幸運。

+0

こんにちは、私はこれを試してみます、ありがとう! – arennuit

+0

こんにちはmatiu、それはfind_library()で動作しました(しかし、なぜか分かりません)。インクルードディレクトリを扱うためのfind_library()と同等のものがありますか?ありがとう;) – arennuit

+0

心配なし:) - https://cmake.org/cmake/help/v3.4/command/find_path.html - チェックアウト:https://cmake.org/Wiki/CMake:How_To_Find_Libraries – matiu

関連する問題