cholmodプログラムのコンパイルの準備 UbuntuでSuitesparse Suitesparse の cholmodを使ってみる

  • 疎行列情報を記録したファイルを読み込んで、それをハンドリングする、というスタイルを基本にしたい
  • ディレクトリ hogeDirを作り、その下に
    • 以下に示す Makefileを置く。このMakefileは以下に示すディレクトリ構造・ファイル配置で動くように作ってある
    • ディレクトリ構造
      • src, library, obj, matrixの4ディレクトリを置く
        • srcディレクトリは、hoge.cppを全部置く。main.cppも。拡張子はcpp
        • libraryディレクトリは、hoge.hを全部置く。
        • objディレクトリはmakeによってできるhoge.oが置かれる
        • matrixは疎行列ファイルを置いておく場所(この場所はコンパイルとは関係ないので、ファイル読み込みのときにパスを教えて読み込ませればよいので、変更してもよい)
    • Makefile
      • 微分ライブラリ(DDG)で使われているMakefileをほぼ踏襲(こちら)
      • 前半でインクルードパス、ライブラリパス、使用ライブラリを指定
      • 後半で、全オブジェクトファイルと指定ライブラリを使ってsstestなる実行可能ファイルを作れ、と命令しつつ、すべてのオブジェクトファイルを対応するcppから作る
      • 最後に不要な中間ファイルを削除したりする
##########################################################################################

# Specify library locations here (add or remove "#" marks to comment/uncomment lines for your platform)

# Mac OS X
# DDG_INCLUDE_PATH      =
# DDG_LIBRARY_PATH      =
# DDG_BLAS_LIBS         = -framework Accelerate
# DDG_SUITESPARSE_LIBS  = -lspqr -lumfpack -lcholmod -lmetis -lcolamd -lccolamd -lcamd -lamd -ltbb -lm -lsuitesparseconfig
# DDG_OPENGL_LIBS       = -framework OpenGL -framework GLUT

# Linux
DDG_INCLUDE_PATH      = -I/usr/include -I/usr/local/include -I/usr/include/suitesparse
DDG_LIBRARY_PATH      = -L/usr/lib -L/usr/local/lib 
# DDG_BLAS_LIBS         = -llapack -lblas -lgfortran
# DDG_SUITESPARSE_LIBS  = -lspqr -lcholmod -lmetis -lcolamd -lccolamd -lcamd -lamd -lm
DDG_SUITESPARSE_LIBS  = -lspqr -lcholmod -lumfpack -lm #-lsuitesparseconfig
# DDG_OPENGL_LIBS       = -lglut -lGL -lGLU -lX11
DDG_OPENGL_LIBS       = -lglut -lGL -lGLU

# # Windows / Cygwin
# DDG_INCLUDE_PATH      = -I/usr/include/opengl -I/usr/include/suitesparse
# DDG_LIBRARY_PATH      = -L/usr/lib/w32api -L/usr/lib/suitesparse
# DDG_BLAS_LIBS         = -llapack -lblas
# DDG_SUITESPARSE_LIBS  = -lspqr -lcholmod -lcolamd -lccolamd -lcamd -lamd -lm
# DDG_OPENGL_LIBS       = -lglut32 -lglu32 -lopengl32

########################################################################################

TARGET = sstest
CC = g++
LD = g++
CFLAGS = -O3 -Wall -Werror -ansi -pedantic  $(DDG_INCLUDE_PATH) -I./include -I./src -DGL_GLEXT_PROTOTYPES
LFLAGS = -O3 -Wall -Werror -ansi -pedantic $(DDG_LIBRARY_PATH)
LIBS = $(DDG_OPENGL_LIBS) $(DDG_SUITESPARSE_LIBS) $(DDG_BLAS_LIBS)

########################################################################################
## !! Do not edit below this line

HEADERS := $(wildcard include/*.h)
SOURCES := $(wildcard src/*.cpp)
OBJECTS := $(addprefix obj/,$(notdir $(SOURCES:.cpp=.o)))

all: $(TARGET)

$(TARGET): $(OBJECTS)
	$(LD) $(OBJECTS) -o $(TARGET) $(CFLAGS) $(LFLAGS) $(LIBS)

obj/%.o: src/%.cpp ${HEADERS}
	$(CC) -c $< -o $@ $(CFLAGS) 

clean:
	rm -f $(OBJECTS)
	rm -f $(TARGET)
	rm -f $(TARGET).exe