DelFEM の開発環境の整備

2009年12月23日

バージョン

DelFEM 1.1.11

注意 1.1.12 で以下の作業が必要でなくなりました。

はじめに

サンプルのコンパイル環境では開発がしにくいので、開発環境を整備してみた。

環境

MinGW, Linux

ライブラリの作成とインストール

ライブラリは Lib の中の libdfm_*.a のようだが、リンクがめんどくさいので 1 つにまとめて、/mingw/lib に入れる。

cd DelFEM1.1.11/Lib
ar r libdfm.a *.o
ranlib libdfm.a
cp libdfm.a /mingw/lib

インクルードファイルのインストール

インクルードファイルとしては Src の中のヘッダーファイルが必要なようなので、それらを /mingw/include に入れる。

cd DelFEM1.1.11/src
mkdir -p /mingw/include/DelFEM/Cad
mkdir -p /mingw/include/DelFEM/Com
mkdir -p /mingw/include/DelFEM/Fem/Eqn
mkdir -p /mingw/include/DelFEM/Fem/Field
mkdir -p /mingw/include/DelFEM/Fem/LS
mkdir -p /mingw/include/DelFEM/LsSol
mkdir -p /mingw/include/DelFEM/MatVec
mkdir -p /mingw/include/DelFEM/Msh
cp Cad/*.h /mingw/include/DelFEM/Cad
cp Com/*.h /mingw/include/DelFEM/Com
cp Fem/Eqn/*.h /mingw/include/DelFEM/Fem/Eqn
cp Fem/Field/*.h /mingw/include/DelFEM/Fem/Field
cp Fem/LS/*.h /mingw/include/DelFEM/Fem/LS
cp LsSol/*.h /mingw/include/DelFEM/LsSol
cp MatVec/*.h /mingw/include/DelFEM/MatVec
cp Msh/*.h /mingw/include/DelFEM/Msh

インクルードファイルの指定

サンプルの fem_view_Solid3D をコンパイルすることにして、その中のインクルードファイルの指定部分を書き換える。

#include "../../src/Com/Camera.h"

#include "../../src/Cad/CadObj2D.h"
#include "../../src/Msh/Mesh3D.h"

#include "../../src/Fem/Eqn/EqnObj_Solid.h"

#include "../../src/Fem/Field/Field.h"
#include "../../src/Fem/Field/FieldWorld.h"
#include "../../src/Fem/Field/DrawerField.h"
の部分を
#include <Com/Camera.h>

#include <Cad/CadObj2D.h>
#include <Msh/Mesh3D.h>

#include <Fem/Eqn/EqnObj_Solid.h>

#include <Fem/Field/Field.h>
#include <Fem/Field/FieldWorld.h>
#include <Fem/Field/DrawerField.h>

コンパイル

たとえば、fem_view_Solid3D をコンパイル。

g++ -o fem_view_Solid3D fem_view_Solid3D.cpp -ldfm -lglut32 -lglu32 -lopengl32

まとめ

以上の作業をバージョンアップごとにやるのもめんどうなので、スクリプトを書いた。

install.sh

LIBDIR=/mingw/lib
INCLUDEDIR=/mingw/include/DelFEM

cd Lib
ar r libdfm.a *.o
ranlib libdfm.a
cp libdfm.a $LIBDIR
cd ..

mkdir -p $INCLUDEDIR/Cad
mkdir -p $INCLUDEDIR/Com
mkdir -p $INCLUDEDIR/Fem/Eqn
mkdir -p $INCLUDEDIR/Fem/Field
mkdir -p $INCLUDEDIR/Fem/LS
mkdir -p $INCLUDEDIR/LsSol
mkdir -p $INCLUDEDIR/MatVec
mkdir -p $INCLUDEDIR/Msh
cd src
cp Cad/*.h $INCLUDEDIR/Cad
cp Com/*.h $INCLUDEDIR/Com
cp Fem/Eqn/*.h $INCLUDEDIR/Fem/Eqn
cp Fem/Field/*.h $INCLUDEDIR/Fem/Field
cp Fem/LS/*.h $INCLUDEDIR/Fem/LS
cp LsSol/*.h $INCLUDEDIR/LsSol
cp MatVec/*.h $INCLUDEDIR/MatVec
cp Msh/*.h $INCLUDEDIR/Msh
cd ..

これを DelFEM のディレクトリに入れて実行すればよい。

$ mv install.sh DelFEM1.1.11
$ cd DelFEMA1.1.11
$ sh install.sh

また、コンパイル用に Makefile を書いた (ここでは fem_view_Solid3D 用)。

Makefile

CXX = g++
CXXFLAGS = -Wall -O2
LDFLAGS =
INCLUDES =
LIBS = -ldfm -lglut32 -lglu32 -lopengl32

TARGET = fem_view_Solid3D.exe
OBJS = fem_view_Solid3D.o

all: $(TARGET)

$(TARGET): $(OBJS)
	$(CXX) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)

clean:
	-rm -f $(OBJS)

.cpp.o:
	$(CXX) $(CXXFLAGS) $(INCLUDES) -c $<

別のプログラムで使うには、TARGET, OBJS の部分を書き換える。

Linux

Linux の場合、install.sh は以下のように書き換えた。

LIBDIR = /usr/local/lib
INCLUDEDIR = /usr/local/include

注意: システムによっては /usr/local/lib, /usr/local/include のパスが通っていないかも。

Makefile は以下のように書き換えた。

LIBS = -ldfm -lglut -lGL -lGLU

TARGET = fem_view_Solid3D