1

cmakeでc++を学ぼうとしています。私はプロジェクトを実行しましたが、cmake が実行され、コンパイルされ、動作します。今、最初のクラスのいくつかのクラスを使用したい新しいプロジェクトを開始しました。私はいくつかのソースコードを読み取ろうとしましたが、両方のアプリケーションから読み取ることができるモジュールを作成する必要があることを理解しています。これが私のリポジトリになります:

/
/cmake
/modules/Network
/software/sw1
/software/sw2

プロジェクトsw1sw2モジュールの両方に依存しますNetowrk。フォルダー cmake にはFindNetwork.cmakeファイルが必要でsw1sw2NetworkCMakeList.txt.

include_directoriesしかし..私は他のcmakeのあいまいさを台無しにしました..

共通モジュールに依存するソフトウェアでリポジトリを簡単に編成する方法の概要を教えてもらえますか?

4

1 に答える 1

2

このリンクは、いくつかの例を提供します。

プロジェクト/インフラストラクチャをどのように見ているかという点では、物事をあまり混乱させないことが最善です。ここで、開始するためのいくつかのポイントを示します (願っています)。

  • C++ では、モジュールはライブラリです (ネットワーク モジュールをライブラリとして参照してください)。
  • ライブラリを含めるには、ライブラリをリンクし、ヘッダー ファイルを利用できるようにする必要があります

cmake では、これは 2 つのコマンドtarget_link_librariesinclude_directories それぞれです。

それを念頭に置いて、プロジェクト構造は次のようになります

/Network/include (api here)
/Network/src
/sw1/src
/sw2/src

あなたのためのベースCmakeLists.txtファイルの例:(プロジェクトのルートディレクトリに配置)

cmake_minimum_required(VERSION 2.7) // your choice
project(myproject) // change name 
add_subdirectory(Network)
add_subdirectory(sw1)
add_subdirectory(sw2)

ネットワークディレクトリには、これがあります

add_library(Network net1.cc net2.cc etc.)

sw1 ディレクトリ内

include_dirs(${MYPROJECT_SOURCE_DIR}/Network/include)
link_directories(${MYPROJECT_BINARY_DIR}/Network)
add_executable (sw1prog sw1.cc sw11.cc etc.)
target_link_libraries (sw1prog Network)

sw2 ディレクトリ内

include_dirs(${MYPROJECT_SOURCE_DIR}/Network/include)
link_directories(${MYPROJECT_BINARY_DIR}/Network)
add_executable (sw2prog sw2.cc sw21.cc etc.)
target_link_libraries (sw2prog Network)

これは、必要になる可能性のあるものの非常に単純化されたバージョンです。FindXXModule.cmake ファイルを作成する必要がなくなり、作成したライブラリを暗黙的に参照します。FindXXModule.cmake を作成したい場合は、これが最適なメカニズムだと思います。実際にライブラリをマシンにインストールし、他の人がそれを見つけられるようにするか、メカニズムを持っていることをお勧めします。複数のプロジェクトが他のライブラリにリンクするため。

これが少し役立つことを願っています。cmake サイトにはいくつかの例がありcmake --help、あなたの友達であることを覚えておいてください。

于 2013-06-22T12:05:42.153 に答える