makeのコンパイル以外の便利な使い方を教えてください。
makeはコンパイラじゃないが
940 :
デフォルトの名無しさん:2009/11/03(火) 05:40:57
質問よく読め
変換
時間因果関係依存ファイル操作
複雑にtouchしないと解けないパズルを
makeで作ることも出来るかもしれんな
make
+ makes
+ many
= problems
覆面算をmakeで解いてください
5桁以下の3数の足し算が8桁になるものか。
wildcardでファイル名の一覧を取る時、下位フォルダの中のファイルもまとめて取る事ってできないでしょうか?
例えばカレントフォルダの中にhogeフォルダとfugaフォルダがあるとして、両フォルダの中のファイル名の一覧を取得しようと思うと
src = $(wildcard hoge/*.c) $(wildcard fuga/*.c)
のようにフォルダ毎にwildcardで取得する方法が思いつきますが、1回のwildcardで取得する方法はないでしょうか?
>>945 GNU makeだっけ?
$(wildcard hoge/*.c fuga/*.c)
とかいう話?
infoによると {hoge,huga}/*.c は不可のようだが。
$(wildcard */*.c)
レス遅れてすみません。
>>946 フォルダを入力しないといけないのが面倒くさいんですよね。保守の面でも。
>>947 *を何回も使えるのは知りませんでした。
しかし、カレントフォルダの下位フォルダも含めて.cファイルを全部取ろうとすると
$(wildcard *.c */*.c */*/*.c */*/*/*.c)
のように階層の深さだけ書かないといけないのがちょっと不満です。
一発で綺麗に書く方法はないんでしょうか?
shellでfind
>>949 make自体の機能にはないんですね。
ありそうでないんだなぁ。
>>950 考え方が逆。Unix系はいろんなツールを組み合わせて使うのが常道だから、外部ツールを使えばいいだけ。
もともと有るもの全部コンパイル。という管理はmakeにはなじまない。
もしかして $(shell ...) を知らないのか?
それだと 950 や 952 の反応がおかしいと思ったんだ。
956 :
デフォルトの名無しさん:2009/11/26(木) 10:08:53
たぶん初歩的なことだと思いますが
hoge.o: hogr.h
と書いてhoge.cppが変更された場合でもコンパイルされる理由がわかりません。
.c.oの暗黙のルールがあるから。
.hの依存を無視するなら、Makefile無しでもコンパイルできる。
$ ls
hoge.c
$ make hoge.o
cc -O2 -pipe -std=gnu99 -fstack-protector -c hoge.c
.c => .cppと読み替えてくれ。
960 :
デフォルトの名無しさん:2009/11/26(木) 12:19:35
わかりやすい説明ありがとう
961 :
デフォルトの名無しさん:2010/01/07(木) 05:26:19
Windowsのコマンドライン環境下で、もしIntelコンパイラがインストールされているならiclを
もしそうでないなら、clをつかうようにしたいのですが、Makefileはどのように書けばよいのでしょうか?
環境変数CCにでも入れておいたらどうよ。
nmake
!if [インテルコンパイラの存在確認] == 0
CC=icl
!else
CC=cl
!endif
!ifの条件式中でコマンドを[]で囲むとexit codeに置換される。
>>963 早速の返信ありがとうございます。
インテルコンパイラの存在確認の部分がわからないのですが。
Windowsの場合どのように確認するのでしょうか?
iclを実行してみてエラーを調べる。
iclがインストールされると設定されるであろう環境変数を調べるスクリプトを書く。
アプリケーションのインストール情報読むスクリプトを書く。
インストールディレクトリ決め打ちで存在確認するバッチファイルを書く。
好きなのをどうぞ。
だからそれくらいならiccインストール時にCCをセットするだけでいいべさ。
自動判別が必要な状況でインストール時にCCが設定できるとは思えないけどな
968 :
デフォルトの名無しさん:2010/01/08(金) 02:34:25
管理者権限がないので、CCが設定できません(泣)
!if [icl -help > nul 2> nul] == 0
あたりで十分だろ。
まさか95とかMEなのでcmd.exeじゃありませんとか言わんよな。
同じく要cmd.exeだが
!if [for %I in (icl.exe) do @if "%~$$PATH:I" == "" exit 1] == 0
というのも思いついた。
この例だとメリットないと思うが、-helpみたいな何もしないで正常終了させる
オプションがないコマンドを調べるのには使えるかも。
intel ccってインストールするとパス通すのか? vcは通さないよな。
iclって、Win版のパラメータは /help とかじゃないのかな?
ちなみに、Linux版はインストールしても環境変数設定スクリプトが着いてくるだけ。
973 :
デフォルトの名無しさん:2010/01/09(土) 08:18:53
Windows版も通常のコマンドプロンプトから使いたいなら自分で環境変数を追加売る必要がある
それじゃ、まじめにやるならインストール情報を読むスクリプト組む。
手抜きならインストールパス決め打ち。
975 :
デフォルトの名無しさん:2010/01/09(土) 10:23:38
Windowsでスクリプトって何使えばいいの?
JScriptかVBScript
理由: わざわざインストールしないで済む。
977 :
デフォルトの名無しさん:2010/01/09(土) 12:07:29
>>976 マイナーすぎてわからないので書いてください
JScript, VBScriptがマイナーというのならnmakeを使うのは諦めなさい。
IrrlichtMLをmakefileを使ってビルドしたいのですが、エラーが出てしまいます。
WindowsでMinGWを使ってるはずなのになぜ-I/usr/X11R6/includeをインクルードしてるんでしょうか・・
freetype.aをリンクさせるため、Makefileの46行目を次のように書き換えると、分離記号を欠いています出て一切動作しません。
http://etwas.wolfish.org/Irrlicht/irrlichtml.html # Next variable is for additional scene nodes etc. of customized Irrlicht versions
EXTRAOBJ = freetype.a
LINKOBJ = $(IRRMESHOBJ) $(IRROBJ) $(IRRPARTICLEOBJ) $(IRRANIMOBJ) \
$(IRRVIDEOOBJ) $(IRRSWRENDEROBJ) $(IRRIOOBJ) $(IRROTHEROBJ) \
$(IRRGUIOBJ) $(ZLIBOBJ) $(JPEGLIBOBJ) $(LIBPNGOBJ) $(EXTRAOBJ)
↓Makefileを書き換えなかった場合(freetypeのincludeは追加した。)
C:\Documents and Settings\ユーザー名\My Documents\Visual Studio 2008\Projects\irrlicht
-1.6\source\Irrlicht>make
cc -fexpensive-optimizations -O3 -DPNG_THREAD_UNSAFE_OK -DPNG_NO_MMX_CODE -DPNG_
NO_MNG_FEATURES -I../../include -Izlib -Ijpeglib -Ilibpng -Ifreetype -I/usr/X11R
6/include -DIRRLICHT_EXPORTS=1 -c -o zlib/adler32.o zlib/adler32.c
process_begin: CreateProcess(NULL, cc -fexpensive-optimizations -O3 -DPNG_THREAD
_UNSAFE_OK -DPNG_NO_MMX_CODE -DPNG_NO_MNG_FEATURES -I../../include -Izlib -Ijpeg
lib -Ilibpng -Ifreetype -I/usr/X11R6/include -DIRRLICHT_EXPORTS=1 -c -o zlib/adl
er32.o zlib/adler32.c, ...) failed.
make (e=2): 指定されたファイルが見つかりません。
make: *** [zlib/adler32.o] エラー 2
>>979 後者のメッセージを見ると、「ccコマンドが見付からない」
って言われているんじゃないか?
腐ったローカライゼーションは捨てて、オリジナルの英語のエラーメッセージを
持って来い。質問はそれからだ。
>979
おかしいと思ったのならちょっとくらい Makefile 読もうぜ。
make sharedlib_win32 staticlib_win32
983 :
デフォルトの名無しさん:2010/01/12(火) 06:08:41
>>978 nmakeじゃなくてcygwinのmakeを使っています。
もうすぐ次スレ
スレタイが楽しみだわ
make makes us madがいいな