我用的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