2017-09-20 14 views
1

各サブディレクトリにすべてのコンポーネントを追加することなく、サブディレクトリでQt5ライブラリを使用します。親のCMakeListsでは、ライブラリが存在し、Qt5_DIR変数が設定されていることを確認するためにfind_package(Qt5)を使用します。例:サブディレクトリ私はQt5::Xmlコンポーネントを使用したいexec1CmakeとQt5:異なるサブディレクトリでQt5の異なるコンポーネントを使用する

CMakeLists.txt

cmake_minimum_required(VERSION 3.0) 

find_package(Qt5 COMPONENTS Core REQUIRED) 

add_subdirectory(exec1) 
add_subdirectory(exec2) 

。私がCMakeを理解する限り、Qt5_DIR変数はサブディレクトリに渡されます。したがって、もう一度を使用する必要はありません。この仮定は正しいですか?例:第二のサブディレクトリexec2

EXEC1/CMakeLists.txt

project(exec1) 
set(SRC exec1.cpp) 
set(HDR exec1.h) 

add_executable(exec1 ${SRC} ${HDR}) 
target_link_libraries(exec1 Qt5::Core Qt5::Xml) 

私はQt5の他のコンポーネントを追加します。例:私は、各サブプロジェクトのために一部のコンポーネントのみを選択するのではなく、親CMakeLists.txtのすべてのコンポーネントを追加する場合

exec2/

project(exec2) 
set(SRC exec2.cpp) 
set(HDR exec2.h) 

add_executable(exec2 ${SRC} ${HDR}) 
target_link_libraries(exec2 Qt5::Core Qt5::Websockets) 

CMakeLists.txtは、それがどんな違いがありますか? 他のサブディレクトリに影響を与えずにサブディレクトリ内のQt5コンポーネントを交換できるように、このケースをどのように処理しますか? 親のCMakeLists.txtで1回使用するのではなく、各サブディレクトリにfind_packageを追加する方が便利ですか?

ご意見やご感想はありがとうございます。

+0

「QT5」ではなく「Qt5」であることに注意してください。これは、大部分のLinuxのように、大文字と小文字を区別するファイルシステムに違いがあります。 – ComicSansMS

+0

この提案をありがとう。私は質問でそれを変更しました。 – KabCode

答えて

0

をサブディレクトリに使用して、CMakeLists.txtルートを1度だけ使用する場合は - Qtを見つけるときに必要なすべてのコンポーネントをリストアップする必要があります。

だからあなたの例以下、ルートCMakeLists.txtはそのようなものでなければなりません:それは暗黙のうちにXmlWebsocket両方の依存関係として追加されているので、私はCoreを削除

cmake_minimum_required(VERSION 3.0) 

find_package(QT5 COMPONENTS Xml Websocket REQUIRED) 

add_subdirectory(exec1) # will use Xml 
add_subdirectory(exec2) # will use Websocket 

注意。同じことは、サブディレクトリのために行く:それはXmlの依存性であるため、ここで

add_executable(exec1 ${SRC} ${HDR}) 
target_link_libraries(exec1 QT5::Xml) 

exec1は、暗黙的にCoreコンポーネントにリンク。

関連する問題