Makefile
避けていたけど、しっかり勉強しておいた方が良さそうなので整理。
テスト時などで、ソースファイルとMakefileのディレクトリが違うとき、*.oファイルはMakeを実行した場所に作られるのに(gcc -cオプションのデフォ動作)、ソースファイルのィレクトリの*.oを探しに行くため、毎回全ファイルがコンパイルされてしまう。
元がこんな感じ。
SRCS = xst_log_file_tb.cpp ../../ucfgen/xst_log_file.cpp
OBJS = $(SRCS:.cpp=.o)
これを追加
OBJS_NODIR = $(notdir $(OBJS))
のように組み込み関数notdirを取った物を、依存関係に入れて処理するとうまくいく。
a.exe: $(OBJS_NODIR)
$(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) -o $@ $(OBJS_NODIR) $(LIBS) 2>&1 | c++filt
もっとちゃんとした方法があると思うけど、とりあえこれでOK。
FreeBSDのmakeは、gnu makeと違うと気がつくまでずいぶん悩んだのは秘密。
なんでsystemcのインストール時にgmakeと打つのかようやくわかった。
Cygwinでも同じテクが使えるようにgmakeを使うようにしよう。
The comments to this entry are closed.


Comments
やっぱり駄目だった。
ちゃんと依存関係書いた方が早い・・・。
もっと勉強しなくては。
Posted by: なつたん | 2007.05.26 05:25 PM
はじめまして。SystemC関連の情報を探していて流れ着きました。
gmakeですが、VPATHという変数でサーチパスを追加することができます。
VPATH = ../../ucfgen/
SRCS = xst_log_file_tb.cpp xst_log_file.cpp
これが正しい使い方なのかという所は疑問なのですが、とりあえずはmakeできると思います。
Posted by: 通りすがり | 2007.05.28 10:24 AM
通りすがりさん、こんにちは。
情報ありがとうございました。
VPATHで、ほぼ期待通りの動きをします。同じ名前のファイルが複数あると危険ですが、今のところ大丈夫なので、この方法を使わせていただきます。
Posted by: なつたん | 2007.05.30 03:49 AM
GNU makeの本を読んでいたら、VPATHを普通に使っていました。
一つのMakefileでやりきるには、これでいきます。
Posted by: なつたん | 2007.06.05 06:38 AM