一身上の都合からswigとOMake
そこに至る変節は割愛。とりあえず涙目。
%.iから%.cxxを生成して本体にリンクさせたいんだけど、そもそもOMakeはcxxをC/C++コードとして認識していない。
OMakerootからopenされてるbuild/C(/usr/lib/omake/build/C.om)を見ると、どうやらCXX_EXTSが拡張子の定義っぽい。
どっかでCXX_EXTSに追加すりゃええなウェハハーとかいう安直な考えは、その後に続く数行のコードで吹き飛ぶ。
CXX_EXTSを回してなにやら設定しているようです。
・・・しかたないからループを分解して、cxx用のをOMakerootに追加。
if $(equal $(OSTYPE), Win32) .SCANNER: scan-cxx-%.cxx: %.cxx /.PHONY/CGeneratedFilesTarget :value: $(digest-in-path-optional $(INCLUDES), $&) $(CXX) $(CXXFLAGS) $(PREFIXED_INCLUDES) /Zs /showIncludes $< |& builtin-cc-depend $< # Include default rule for backwards-compatibility .SCANNER: %$(EXT_OBJ): %.cxx /.PHONY/CGeneratedFilesTarget :value: $(digest-in-path-optional $(INCLUDES), $&) $(CXX) $(CXXFLAGS) $(PREFIXED_INCLUDES) /Zs /showIncludes $< |& builtin-cc-depend $< export else .SCANNER: scan-cxx-%.cxx: %.cxx /.PHONY/CGeneratedFilesTarget :value: $(digest-in-path-optional $(INCLUDES), $&) $(CXX) $(CXXFLAGS) $(PREFIXED_INCLUDES) -MM $< # Include default rule for backwards-compatibility .SCANNER: %$(EXT_OBJ): %.cxx /.PHONY/CGeneratedFilesTarget :value: $(digest-in-path-optional $(INCLUDES), $&) $(CXX) $(CXXFLAGS) $(PREFIXED_INCLUDES) -MM $< export
次は、swig -MMで帰ってくる依存関係ルールを追加。
gcc -MMの真似
.SCANNER: scan-i-%.i: %.i /.PHONY/CGeneratedFilesTarget :value: $(digest-in-path-optional $(INCLUDES), $&) swig -MM $< export
で、iから依存関係を噛ませて、cxxを生成
%_wrap.cxx: %.i %.cpp :scanner: scan-i-%.i swig -c++ -python -o $@ $< export
>2009/06/05 %.cppに依存する必要はないように思えてきたので修正
%_wrap.cxx: %.i :scanner: scan-i-%.i swig -c++ -python -o $@ $< export
>hogehoge.i
%module hoge %{ #include "hoge.hpp" %} %include "hoge.hpp"
% swig -MM hogehoge.i hogehoge_wrap.c: \ hogehoge.i \ hoge.hpp %
これで、exe/libの依存関係にhoge_wrap.cxxを追加してやると、hoge.iとhoge.hにさらに依存して、swigでhoge_wrap.cxxを生成して云々をしてくれる
・・・と思うよ。