CMake
Make

make cmake を知る.使う


make cmake って?

ビルドしてくれるやつって知ってるけど使い方とか分からんので調べる

(いろいろなサイトの情報を自分のためにまとめるため...(T-T))


Make

MakeFile に依存関係を書き,make で MakeFile のコマンドを実行してくれるやつみたい

差分をコンパイルしてくれるらしくてすごい賢い子みたい.


MakeFile のフォーマット

.PHONY: ターゲット

ターゲット : 依存ファイル
実行コマンド
# ↑ indent する

で,このターゲットをタスクターゲットとも呼ぶらしい.

$ make [ターゲット]

で実行

※ .PHONY とは

タスクターゲットを宣言するもの


しかし,もしタスク名と同名のファイルやディレクトリがあると混乱しますので,.PHONYは積極的に書くようにしましょう.


こういうことがあるらしいので書いたほうがいいやつ


いろいろなルール

タスクターゲットは,依存ターゲット を複数持つことができる.

が,ちょっと文章を読んだだけでは少し理解が難しかった.

それなりにややこしそうだし,cmake の方が扱いやすいと書いてあったので,make はまた余裕があるときに,追記しようと思う.(目的が,cpp コンパイルのためもある)


CMake

( cpp って g++ でコンパイルするんだ.へぇ (OcO) )

C++ ビギナーなので,まだ静的・共有ライブラリ,なんじゃそれって状態です.

が,使い方を書いておきます.

make でいう MakeFile は CMakeLists.txt になります.

# CMakeのバージョンを設定

cmake_minimum_required(VERSION 2.8)
# プロジェクト名と使用する言語を設定
project(test_cmake CXX)
# a.outという実行ファイルをmain.cppとhello.cppから作成
add_executable(a.out main.cpp hello.cpp)

とりあえず,これで,実行できるらしいでございます.

そして,ライブラリを作成するには...

# 静的ライブラリ

cmake_minimum_required(VERSION 2.8)
project(test_cmake CXX)
# hello.cppとgood_morning.cppをコンパイルして静的ライブラリlibgreetings.aを作成
add_library(greetings STATIC hello.cpp good_morning.cpp)
# a.outという実行ファイルをmain.cppから作成
add_executable(a.out main.cpp)
# a.outを作成する際にlibgreetings.aをリンク
target_link_libraries(a.out greetings)

# 共有ライブラリ

cmake_minimum_required(VERSION 2.8)
project(test_cmake CXX)
# hello.cppとgood_morning.cppをコンパイルして共有ライブラリlibgreetings.soを作成
add_library(greetings SHARED hello.cpp good_morning.cpp)
add_executable(a.out main.cpp)
# a.outを作成する際にlibgreetings.soをリンク
target_link_libraries(a.out greetings)

cmake を使うときは,build ディレクトリ以下で行ったほうが管理が楽になるみたいですね.


ソースファイルが,複数のディレクトリをまたいでいるとき

こういう場面ももちろん起こり得る.

まぁ,ディレクトリごとにコンパイル.ライブラリの作成みたいなフローになるのでしょうか.

cmake では,ディレクトリごとに CMakeLists.txt を作成


/CMakeLists.txt


cmake_minimum_required(VERSION 2.8)
project(test_cmake CXX)
# サブディレクトリを登録
add_subdirectory(src)
add_subdirectory(test)


/src/CMakeLists.txt


add_library(greetings SHARED hello.cpp good_morning.cpp)



/test/CMakeLists.txt


add_executable(a.out main.cpp)
# a.outをコンパイルする際に/srcをインクルードファイルを探すパスとして登録
target_include_directories(a.out PUBLIC ${CMAKE_SOURCE_DIR}/src)
target_link_libraries(a.out greetings)


※正直なところ,コピペをさせていただいているだけで全然理解できていないです.cppを学習して,実際に使ってみて更新していきます.


参考


make

https://qiita.com/thaladabar/items/1f72a3359acb5cf7428e

http://objectclub.jp/community/memorial/homepage3.nifty.com/masarl/article/gnu-make/rule.html


cmake

https://qiita.com/shohirose/items/45fb49c6b429e8b204ac