Skip to content

Doraemonjayo/EasyCMake

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EasyCMake

このリポジトリはCMakeプロジェクトのテンプレート形式になっています。このプロジェクトではCMakeLists.txtがディレクトリ内のソースファイルを自動で探索するため、プロジェクトに合わせてCMakeLists.txtを書き直す必要がありません。

機能

  • ソースファイルの自動探索
  • 一つのプロジェクトで複数の実行ファイルを生成
  • プロジェクト内のすべての実行ファイルで共有されるインクルードパス及びソースファイルの管理
  • 各実行ファイルのみで有効なインクルードパス及びソースファイルの管理
  • 各実行ファイルのみ、またはすべての実行ファイルと外部ライブラリ(Python, OpenCV, boost等)の紐付け

ディレクトリ構造

このプロジェクトにはmoduleとappという特有の概念が存在します。moduleはmodulesディレクトリ内のソースファイルやヘッダファイルの集まりです。appはappsディレクトリの各サブディレクトリで管理されるソースファイルやヘッダファイルの集まりです。

EasyCMake/
├── .gitignore
├── CMakeLists.txt
├── EasyCMake.cmake
├── LICENSE
├── README.md
├── build/
├── apps/
│   ├── app1/
│   │   ├── app1.cpp
│   │   ├── app1.hpp
│   │   └── main.cpp
│   ├── app2/
│   │   ├── app2.cpp
│   │   ├── app2.hpp
│   │   ├── main.cpp
│   │   └──pkglinker.cmake
└── modules/
    └── module1/
        ├── module1.cpp
        └── module1.hpp

app

appごとに実行ファイルが生成され、実行ファイルの名前はそのディレクトリ名になります。各appのディレクトリ内のソースファイル及びヘッダファイルは、そのapp内だけで紐付けられます。ソースファイルはディレクトリ内で再帰的に探索されるため、app内でフォルダを作成して管理することも可能です。

module

moduleは、それ単体では実行ファイルを生成されません。moduleのソースファイルとヘッダファイルは、プロジェクト内のすべてのappと紐付けられます。modulesディレクトリ内のソースファイルは再帰的に探索されます。

外部ライブラリの紐付け

moduleまたはappのディレクトリでpkglinker.cmakeというファイルを書くことで設定します。

例 : apps/app2/pkglinker.cmake

link_package(
    Python3
    COMPONENTS Interpreter Development
    DIRECTORIES "\${Python3_INCLUDE_DIRS}"
    LIBRARIES "\${Python3_LIBRARIES}"
)

この例ではapp2にPython3を紐付けしています。これは以下のようなスクリプトを意味し、自動的に実行されます。

find_package(Python3 REQUIRED COMPONENTS Interpreter Development)
target_include_directories(app2 PRIVATE ${Python3_INCLUDE_DIRS})
target_link_libraries(app2 PRIVATE ${Python3_LIBRARIES})

COMPONENTS DIRECTORIES LIBRARIESについては、必要のないものは省略することができます。

注意 !

Python3_INCLUDE_DIRSPython3_LIBRARIES等はfind_package(Python3 ...)を実行する以前には存在しない変数です。

関数の引数は実行時に展開されてしまうため、例のようにバックスラッシュをドル記号の前に書き、DIRECTORIES "\${Python3_INCLUDE_DIRS}" LIBRARIES "\${Python3_LIBRARIES}"と記述することで変数が展開されることを防いでください。

Python3_INCLUDE_DIRSPython3_LIBRARIESの内容がわかっている場合は、その内容を直接記述することが可能です。

使い方

以下はUbuntuを想定したコマンドで説明します。

まずリポジトリをクローンします。

cd ~/
git clone https://github.com/Doraemonjayo/EasyCMake.git
cd ./EasyCMake

ビルドします。

cd build
cmake ..
make
cd ..

実行例1

./build/app1

出力

Hello! from app1.
Hello! from module1.

実行例2

./build/app2

出力

Hello! from app2.
Hello! from module1.
Hello! from Python.

ライセンス

このプロジェクトはMITライセンスの下でライセンスされています。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published