数值计算

星期三, 五月 24, 2006

我用的makefile

# File name: make.inc

# 放在~/include 下

#

# 在octane中使用本链接库的时候,注意如下的问题 :

# 下面的命令没有问题

# cc -L~/lib -o t test.o -lrnm

# 下面的命令有问题

# cc -L~/lib -o t -lrnm test.o

# WARNING 84: /home/rui/lib/librnm.so is not used for resolving any symbol.

# ERROR 33: Unresolved text symbol "agaus_" -- 1st referenced by test.o.

#

#

# 在HP-UX中使用本链接库的时候,注意如下的问题 :

# 下面的命令没有问题

# cc -L~/lib -o t test.o -lrnm

# 下面的命令有问题

# cc -o t -lrnm test.o -L~/lib

# ERROR 33: Can not find liberary -lrnm

#

HOMEPATH=$(HOME)

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

# 缺省路径

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

INCLUDEPATH = $(HOMEPATH)/include

LIBPATH= $(HOMEPATH)/lib



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

# 编译命令

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

FOR_COMPLIER = f90

F90_COMPLIER = f90

C_COMPLIER = cc

CPP_COMPLIER = aCC



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

# 缺省编译选项

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

DEFINES =

FOR_OPTION = +O3 -I$(INCLUDEPATH) +nouppercase

F90_OPTION = +O3 -I$(INCLUDEPATH) +nouppercase

C_OPTION = +O3 -I$(INCLUDEPATH)

CPP_OPTION = +O3 -I$(INCLUDEPATH)

LINK_OPTION =



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

# 创建动态链接库

DYN_LIB_CREATER = ld -b

# 创建静态库

STA_LIB_CREATER = ar r



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

# Fortran的链接库

FORTRAN_LIB = -L/opt/fortran90/lib/ -lF90 -lisamstub



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

# LAPACK的链接库

LAPACK_LIB = -llapack -lm



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

FOR_FILES = $(wildcard *.f) $(wildcard *.for) $(wildcard *.f77)

F90_FILES = $(wildcard *.f90)

C_FILES = $(wildcard *.c)

CPP_FILES = $(wildcard *.cc) $(wildcard *.cpp)



FOR_OBJS = $(patsubst %.f,%.o,$(patsubst %.for,%.o,$(patsubst %.f77,%.o,$(FOR_FILES))))

F90_OBJS = $(patsubst %.f90,%.o,$(F90_FILES))

CPP_OBJS = $(patsubst %.cc,%.o,$(patsubst %.cpp,%.o,$(CPP_FILES)))

C_OBJS = $(patsubst %.c,%.o,$(C_FILES))





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

# You can define followed parameter yourself

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

MY_DEFINES =

MY_FOR_OPTION =

MY_F90_OPTION =

MY_C_OPTION =

MY_CPP_OPTION =

MY_LINK_OPTION =

PROGRAM = sl

LIB_OBJ =



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

# Do not forget to

# include $(INCLUDEPATH)/make.tail

# At tail of your makefile

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

# 文件结束







# 文件 make.tail

# 放在每个 makefile 文件最后

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



echo:

@echo $(F90_FILES)

@echo $(HOMEPATH)



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

# Create Dynamic Liberary

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

dyn_lib: $(LIB_OBJ)

$(DYN_LIB_CREATER) -o lib$(PROGRAM).so $(LIB_OBJ) +h lib$(PROGRAM).so

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

# Create Static Liberary

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

stc_lib: $(LIB_OBJ)

$(DYN_LIB_CREATER) -o lib$(PROGRAM).so $(LIB_OBJ)

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

# Copy Dynamic Liberary to LIBPATH

# Copy Fortran90 Module file to INCLUDEPATH

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

copy_lib:

mv lib$(PROGRAM).so $(LIBPATH)

copy_mod:

mv *.mod $(INCLUDEPATH)

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

# Clean Total project,Include Data file ,

# Object file , dynamic liberary ,

# static liberary , program

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

clean:

rm *.o *.mod *.plt *.so *.a $(PROGRAM)



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

# 缺省编译命令

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



.SUFFIXES: .f90 .c .for .f .cpp .cc .o



.f90.o:

$(F90_COMPLIER) $(F90_OPTION) $(MY_F90_OPTION) -c $<

.for.o:

$(FOR_COMPLIER) $(FOR_OPTION) $(MY_FOR_OPTION) -c $<

.f.o:

$(FOR_COMPLIER) $(FOR_OPTION) $(MY_FOR_OPTION) -c $<

.c.o:

$(C_COMPLIER) $(DEFINES) $(C_OPTION) $(MY_DEFINES) $(MY_C_OPTION) -c $<

.cc.o:

$(CPP_COMPLIER) $(DEFINES) $(CPP_OPTION) $(MY_DEFINES) $(MY_CPP_OPTION) -c $<

.cpp.o:

$(CPP_COMPLIER) $(DEFINES) $(CPP_OPTION) $(MY_DEFINES) $(MY_CPP_OPTION) -c $<



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

# 文件结束

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





然后,每个makefile如下:

HOMEPATH = $(HOME)



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



include $(HOMEPATH)/include/make.inc



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



MY_DEFINES =

MY_FOR_OPTION =

MY_F90_OPTION =

MY_C_OPTION =

MY_CPP_OPTION =

MY_LINK_OPTION =



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



LIB_OBJ =

PROGRAM = sl



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



LINKER = $(F90_COMPLIER)

LIB = $(LAPACK_LIB)



COMMONOBJ =

C_COMMONOBJ =

MOBJ = solve.o

C_OBJ = solve_c.o

CC_OBJ = solve_cc.o





all: program c_program cc_program

program: $(MOBJ)

$(LINKER) -L$(LIBPATH) $(LINK_OPTION) -o $(PROGRAM) \

$(MOBJ) $(COMMONOBJ) $(LIB)

c_program: $(C_OBJ)

$(C_COMPLIER) -L$(LIBPATH) $(LINK_OPTION) -o c_$(PROGRAM) \

$(C_OBJ) $(COMMONOBJ) $(LIB)

cc_program: $(CC_OBJ)

$(CPP_COMPLIER) -L$(LIBPATH) $(LINK_OPTION) -o C_$(PROGRAM) \

$(CC_OBJ) $(COMMONOBJ) $(LIB)





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



include $(INCLUDEPATH)/make.tail



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





希望对于不同的系统,只要修改make.inc和make.tail

0 Comments:

发表评论

<< Home