2024/01/03(水) [n年前の日記]
#2 [prog] Makefileの中で処理を分けたい
ここ数日、MinGW用と、MSYS2 MINGW64用の、2つのMakefileを書きながら実験してるけど、なんだか面倒臭くなってきた。make -f Makefile.msys2 と打つべき場面で make と打ってしまってエラーが出てきたり…。ちょっと面倒臭い。
1つの Makefile の中で、MinGW上で使おうとしているのか、MSYS2 MINGW64上で使おうとしているのか判別して、処理を分けることはできないのだろうか。
使ってるのは GNU Make。3.81 と 4.4.1。
1つの Makefile の中で、MinGW上で使おうとしているのか、MSYS2 MINGW64上で使おうとしているのか判別して、処理を分けることはできないのだろうか。
使ってるのは GNU Make。3.81 と 4.4.1。
◎ 処理を分けることもできるらしい :
調べてみたら、Makefile の中でも、ifeq - else - endif や ifdef - else - endif といった書き方ができるらしい。
また、MSYS2 上で作業する場合、環境変数 MSYSTEM に、MINGW32 とか MINGW64 といった文字列が入るらしい。
MinGW上では、何も入らない。
であれば、こういう書き方ができるかな…。
サンプルについてくる Makefile としては、ちょっと分かりづらくなるな…。でもまあ、フツーはコンパイルの仕方を書かないでソースだけ紹介するサンプルが大半だし。まだ Makefile があるだけマシかも。
また、MSYS2 上で作業する場合、環境変数 MSYSTEM に、MINGW32 とか MINGW64 といった文字列が入るらしい。
$ echo $MSYSTEM MINGW64
MinGW上では、何も入らない。
> echo %MSYSTEM% %MSYSTEM%
であれば、こういう書き方ができるかな…。
ifeq ($(MSYSTEM),MINGW64) # MSYS2 MINGW64 04_loadpng_objcopy.exe: 04_loadpng_objcopy.c texture.o Makefile gcc 04_loadpng_objcopy.c texture.o -o 04_loadpng_objcopy.exe -D FREEGLUT_STATIC -lfreeglut -lopengl32 -lwinmm -lgdi32 -static texture.o: texture.png Makefile ld -r -b binary -o texture.o texture.png else # MinGW 04_loadpng_objcopy.exe: 04_loadpng_objcopy.c texture.o Makefile gcc 04_loadpng_objcopy.c texture.o -o 04_loadpng_objcopy.exe -D FREEGLUT_STATIC -lfreeglut_static -lopengl32 -lwinmm -lgdi32 texture.o: texture.png Makefile objcopy -I binary -O elf32-i386 -B i386 texture.png texture.o #texture.o: texture.png Makefile # ld -r -b binary -o texture.o texture.png endif .PHONY: clean clean: rm -f 04_loadpng_objcopy.exe rm -f *.o
サンプルについてくる Makefile としては、ちょっと分かりづらくなるな…。でもまあ、フツーはコンパイルの仕方を書かないでソースだけ紹介するサンプルが大半だし。まだ Makefile があるだけマシかも。
◎ 余談。特殊変数について :
余談。本来 Makefile を書くときは、$@ や $< 等の変数を使うのが当たり前だけど。
_Makefile の特殊変数・自動変数の一覧 | 晴耕雨読
_トリビアなmakefile入門
そのあたりを書いちゃうと、一見どういうことをしてるのか分からなくなりそうなので、あえてベタ書きしてます。ただ、こういう書き方をしてしまうなら、いっそのことbatファイルでもええやん、とも…。
_Makefile の特殊変数・自動変数の一覧 | 晴耕雨読
_トリビアなmakefile入門
そのあたりを書いちゃうと、一見どういうことをしてるのか分からなくなりそうなので、あえてベタ書きしてます。ただ、こういう書き方をしてしまうなら、いっそのことbatファイルでもええやん、とも…。
[ ツッコむ ]
以上です。