web-dev-qa-db-ja.com

CMakeサブディレクトリの依存関係

私はCMakeにとても慣れていません。実際、私はKdevelop4 widh C++で試しています。

すべてのソースをコンパイルして単一の実行可能ファイルにリンクする必要がある場合でも、作成するすべての名前空間に対してサブディレクトリを作成する習慣があります。 kdevelopの下にディレクトリを作成すると、add_subdirectoryコマンドでCMakeLists.txtが更新され、その下に新しいCMakeLists.txtが作成されますが、それだけでは、その下のソースがコンパイルリストに追加されません。

私は次のようにルートCMakeLists.txtを持っています:

 
 project(gear2d)
 
 add_executable(gear2d object.cc main.cc)
 
 add_subdirectory(component)

Component /の下に、gear2d実行可能ファイルを生成するためにコンパイルおよびリンクしたいソースがあります。どうすればそれを達成できますか?

CMake FAQ have this entryですが、それが答えなら、プレーンなMakefileを使い続けたいと思います。

これを行う方法はありますか?

18
Leonardo

サブディレクトリを追加しても、CMakeにディレクトリに入り、そこで別のCMakeLists.txtを探すように指定するだけです。 add_library を使用してソースファイルを使用してライブラリを作成し、 target_link_libraries を使用して実行可能ファイルにリンクする必要があります。次のようなもの:

サブディレクトリCMakeLists.txt

set( component_SOURCES ... ) # Add the source-files for the component here
# Optionally you can use file glob (uncomment the next line)
# file( GLOB component_SOURCES *.cpp )below

add_library( component ${component_SOURCES} )

トップディレクトリCMakeLists.txt

project( gear2d )
add_subdirectory( component )
add_executable( gear2d object.cc main.cc )
target_link_libraries( gear2d component )
20
André