Makefile项目管理
本帖最后由 Jackdaw 于 2018-12-16 19:06 编辑写在前面:
在开发程序的时候,可能程序规模不大或者其他原因,我们想自己写makefile管理项目,那么这个帖子有一个示例。
闲话少说,上代码。
代码:
main.f90
program main
use func_m
implicit none
real(fp):: a(5)
call sub(a)
write(*,*) a
end program main
fun.f90
module func_m
implicit none
#ifdef DOUBLE_PRECISION
integer,parameter :: fp = kind(1.0d0)
#else
integer,parameter :: fp = kind(1.0)
#endif
contains
subroutine sub(a)
real(fp):: a(:)
a = 10.0_fp
end subroutine
end module
makefile
#!/usr/bin/bash
SRC = fun.f90
SRC:= $(SRC) main.f90
OBJ = $(SRC:.f90=.o)
FC= gfortran
FF= -cpp -O0 -g -fbacktrace
DF= -DDOUBLE_PRECISION
EXE = myPro
ALL : $(OBJ)
$(FC) $(FF) $(DF) -o $(EXE)$(OBJ)
$(OBJ):%.o:%.f90
$(FC) $(FF) $(DF) -c $< -o $@
.PONHY: clean
clean :
rm -rf *.mod *.o $(EXE)
演示:
http://bbs.fcode.cn/forum.php?mod=image&aid=2069&size=300x300&key=4297bfb32b1e9fdf&nocache=yes&type=fixnone
本帖最后由 liudy02 于 2018-11-14 10:49 编辑
额,不知道楼主这里为何会这么顺利,实际在运用中的话有个问题是
会提示.mod文件找不到,但是事实上是.mod文件和.o文件一起出来的,不知道为啥会这样
所以在实践中用make的话我是这样做的:
所有的mod,每一个mod单独一个文件,文件名和mod名相同,然后需要写一个类似于执行
a.mod : a.f90
$(FC) -c a.f90
的语句。虽然其实这个语句加上之后make执行时啥也没干,但是不会报错了
楼主你这个我没看懂,是怎么解决这个问题的呢,能给小白科普一下么? 本帖最后由 Jackdaw 于 2018-11-18 10:25 编辑
liudy02 发表于 2018-11-14 10:43
额,不知道楼主这里为何会这么顺利,实际在运用中的话有个问题是
会提示.mod文件找不到,但是事实上是.mod ...
在编译阶段,生成目标文件或者可执行文件,如果用到了module,会同时生成模块描述文件,也就是 nameOfModule.mod 文件
我猜测你那里遇到报错的原因可能是编译顺序的原因,实际上含有module的代码并没有先行编译,导致其他代码在编译时找不到这个文件
推荐的方法有两种,一种像我makefile里写的那样,先写其他含有module的代码,再写使用module的代码,最后再添加一个主程序文件;另外一种就是,直接用 gfortran -o a.out SRC.f90 生成可执行程序
参考链接:GFortran UsageWiKi liudy02 发表于 2018-11-14 10:43
额,不知道楼主这里为何会这么顺利,实际在运用中的话有个问题是
会提示.mod文件找不到,但是事实上是.mod ...
这样的话,不是每个module都要写一行这种代码?我有几十个module…… Jackdaw 发表于 2018-11-18 10:18
在编译阶段,生成目标文件或者可执行文件,如果用到了module,会同时生成模块描述文件,也就是 nameOfModu ...
“一种像我makefile里写的那样,先写其他含有module的代码,再写使用module的代码,最后再添加一个主程序文件”
您这样处理,具体是在makefile的哪几行体现的呢?我觉得像是2-3行,但又不像。可否指点一下 静待花开 发表于 2023-8-4 19:38
这样的话,不是每个module都要写一行这种代码?我有几十个module……
用通配符啊……
页:
[1]