makefile
*makefileの書き方メモ [[index]] #contents **例 >CC = gcc >CFLAG = >DEST = /usr/local/bin >PROGRAM = hello >SRCS = hello.c > >all: $(PROGRAM) > >$(PROGRAM): $(SRCS) > $(CC) -o $(PROGRAM) $^ -Wall > >clean: > rm -f $(PROGRAM) > >install: $(PROGRAM) > install -s $(PROGRAM) $(DEST) Make "$^" は自動変数で、必須項目をスペース区切りで展開。重複は取り除かれる。 gcc "-o" 出力先 "-Wall" ワーニング **例 複数ソース >CC = gcc >CFLAG = >DEST = /usr/local/bin >PROGRAM = ttytest > >all: $(PROGRAM) > >$(PROGRAM): *.c > $(CC) -o $(PROGRAM) $^ -Wall > >clean: > rm -f $(PROGRAM) $(OBJS) > >install: $(PROGRAM) > install -s $(PROGRAM) $(DEST) **引数無しでmake実行した場合 makeは引数が無い場合、最初のTARGETが構築される。 **カレントディレクトリの変更「-C」 「-C $@」 "-C" はカレントディレクトリの変更 "$@"はターゲットのファイル名 makecurdir/makefile >DIRS = fld1 fld2 > >.PHONY: $(DIRS) > >all: $(DIRS) > >$(DIRS): > make -C $@ makecurdir/fld1/makefile >all: > pwd makecurdir/fld2/makefile >all: > pwd 実行結果 >[makecurdir]$ make >make -C fld1 >make[1]: Entering directory '/home/username/src/makecurdir/fld1' >pwd >/home/username/src/makecurdir/fld1 >make[1]: Leaving directory '/home/username/src/makecurdir/fld1' >make -C fld2 >make[1]: Entering directory '/home/username/src/makecurdir/fld2' >pwd >/home/username/src/makecurdir/fld2 >make[1]: Leaving directory '/home/username/src/makecurdir/fld2' >[makecurdir]$ **makeの引数 makefile >all: > echo ${arg} 実行結果 >$ make >echo > >$ make arg=test >echo test >test >$ ${arg} 引数にarg=xxxxを指定した時、xxxxが渡される **自動変数 |$@|ターゲットのファイル名 |$^|すべての必須項目をスペースで区切ったリスト。重複ファイルは除去される。 **参考 [[Makefileの解説>http://omilab.naist.jp/~mukaigawa/misc/Makefile.html]] [[【初心者向け】Makefile入門>https://qiita.com/mizcii/items/cfbd2aa17f6b7517c37f]] end.
2025-03-31 23:49:04 32400