omakeメモ
OMakefileの中身考察
Singletonのサンプルで使ってるOMakefileについてテキトーなメモ書いとく。(あくまで主観で裏付けあまりしてませんので注意)
中身はこんな感じ。
CXX = g++ CFILES[] = main MAIN = singleton_test CXXProgram($(MAIN), $(CFILES)) .PHONY: build build: $(MAIN) .PHONY: test test: $(MAIN) $(shell pwd)/$(MAIN) .PHONY: all all: build test .PHONY: clean clean: rm -rf $(filter-proper-targets $(ls R, .)) .DEFAULT: build
変数の宣言とアクセスはこんな感じ。
# 宣言 FILE = test.cpp # アクセス $(FILE)
リストになってるものは配列チックに宣言する。
# 宣言 FILES[] = test1.cpp test2.cpp # アクセス $(FILES)
実行ファイルのビルドルールは提供されてる関数で一発。(ファイルの順番とかは気にしなくていいのかな)
CXXProgramはC++用、CならCProgramだった気がする。
# コンパイラの指定 CXX = g++ # $(FILES)から$(MAIN)を作成するためのビルドルール作成 CXXProgram($(MAIN), $(CFILES))
Makefileちっくなビルドルールは先に".PHONY"でルール名を宣言してから書くみたい。
# omake buildで実行する .PHONY: build build: $(MAIN)
シェルコマンドの出力を取得したいときは"$(shell command)"を使う。(shell関数にcommandを引数で渡してるイメージ?)
# `pwd`の出力を利用してる $(shell pwd)/$(MAIN)
ビルドで生成されるファイルの一覧を取得するには"$(filter-proper-targets $(ls R, .))"を使う。
やっていることは、
- "$(ls R, .)"でカレントディレクトリ直下のファイルのリストを取得、要するに"ls(R, .)"の出力結果らしい。サブディレクト見ないなら"$(ls .)"でおk。
- filter-proper-targetsは引数のリストからビルドターゲットをフィルタリングする関数らしい。
cleanはとりあえず以下のように書いてみる。
.PHONY: clean clean: rm -rf $(filter-proper-targets $(ls R, .))
引数なしでomake実行したときの動作は".DEFAULT"に指定。
# デフォルトのルールは"build"、つまり"omake build" .DEFAULT: build
ちなみにファイルは頭から順番に読んでるのでビルドルールは使う箇所よりも前に書かないといけない? ".PHONY"だけ先に書けばおk? 要調査。