LoginSignup
28
24

make cmake を知る.使う

Last updated at Posted at 2018-09-08

make cmake って?

良い感じにビルドしてくれる便利なもの、
ということは知ってるけれど使い方が分からないので調べてみたものをメモします

Make

MakeFile に依存関係を書き,make で MakeFile のコマンドを実行してくれるもの
差分をコンパイルしてくれるらしく、どうやら賢い

MakeFile のフォーマット

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

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

$ make [ターゲット]

で実行

※ .PHONY とは
タスクターゲットを宣言するもの

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

ということがあるらしい

いろいろなルール

タスクターゲットは,依存ターゲット を複数持つことができる.
が,ちょっと文章を読んだだけでは少し理解が難しかった.

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

CMake

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

28
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
24