在Ubuntu系统中使用Fortran编写Makefile可以帮助你自动化编译过程。以下是一个简单的示例,展示如何为一个Fortran程序编写Makefile。
假设你有一个名为main.f90
的Fortran源文件,并且它依赖于一个名为module.f90
的模块文件。下面是如何编写Makefile来编译这个程序。
program main
use module
implicit none
call greet('World')
contains
subroutine greet(name)
character(len=*), intent(in) :: name
print *, 'Hello, ', name, '!'
end subroutine greet
end program main
module module
implicit none
contains
! 这里可以放置模块代码
end module module
# 编译器
FC = gfortran
# 编译选项
FFLAGS = -Wall -O2
# 目标可执行文件
TARGET = main
# 源文件
SRCS = main.f90 module.f90
# 对象文件
OBJS = $(SRCS:.f90=.o)
# 默认目标
all: $(TARGET)
# 链接目标文件生成可执行文件
$(TARGET): $(OBJS)
$(FC) $(FFLAGS) -o $@ $^
# 编译源文件生成对象文件
%.o: %.f90
$(FC) $(FFLAGS) -c $< -o $@
# 清理生成的文件
clean:
rm -f $(OBJS) $(TARGET)
main.f90
、module.f90
和Makefile
。make
命令来编译程序:make
./main
make clean
FC
变量定义了使用的Fortran编译器,这里是gfortran
。FFLAGS
变量定义了编译选项,-Wall
表示显示所有警告,-O2
表示优化级别2。TARGET
变量定义了最终生成的可执行文件的名称。SRCS
变量列出了所有的源文件。OBJS
变量通过替换.f90
为.o
从SRCS
生成对象文件列表。all
目标是默认目标,它会调用编译规则生成可执行文件。$(TARGET): $(OBJS)
规则定义了如何从对象文件生成可执行文件。%.o: %.f90
是一个模式规则,定义了如何从.f90
文件生成.o
文件。clean
目标定义了如何删除生成的对象文件和可执行文件。通过这种方式,你可以轻松地管理Fortran项目的编译过程。