2012-03-09 5 views
3

CMake質問、CMakeを使用してインポートされたライブラリの範囲を変更する方法

インポートされたライブラリには、作成されたディレクトリ以下のスコープがあります。

このライブラリを親スコープで使用する場合、どうすればよいですか?例えば

トップCMakeLists.txt

add_subdirectory(sub) 
add_executable(myapp main.cpp) 
target_link_libraries(myapp imported_lib) 

サブCMakeLists.txt

add_library(imported_lib STATIC IMPORTED) 

あなたが行う必要はありません、あなたは~~

答えて

0

を助けてくれてありがとうCMakeはこの依存関係を自動的に解決します。 add_subdirectoryのためのマニュアルを参照してください:

親プロジェクトによって構築されたターゲットはdependeeターゲットは依存関係を満たすために、親プロジェクトのビルドシステムに含まれる、サブディレクトリ内のターゲットに依存している場合。

明示的なPARENT_SCOPEパラメータを渡す必要があるset()およびlist()コマンドとは対照的です。

+0

このライブラリは多くのターゲットで使用されています。新しいターゲットを追加するたびにサブディレクトリを変更する必要はありません。 – compass00

+0

その場合は、検索スクリプトを作成する必要があります。詳細は、find_packageのドキュメントを参照してください。 – ComicSansMS

1

クラシックライブラリとは異なり、インポートされたライブラリのスコープはディレクトリです。 これは、GLOBALオプションを使用して変更できます。ここで

extract from the documentationです:

ターゲット名は、それが下に作成されたディレクトリにスコープを持っていますが、GLOBALオプションは、可視性を拡張します。

例:

add_library(imported_lib STATIC IMPORTED GLOBAL) 

私の知る限り、このオプションは常に利用可能となっています。

関連する問題