Makefile在不同的目录中编译Fortran源文件

时间:2012-11-23 00:42:51

标签: makefile fortran dependency-management directory

这是我的问题:我已经使用Java多年,并喜欢有许多目录分隔代码的不同区域。对于我目前的项目,我正在编写Fortran代码,它应该在Windows和Unix / Linux下编译。对于Windows,我使用Eclipse / Photran和MinGW / gfortran工具来设置Makefile。

这是所需的项目结构(类似Java的深层嵌套树会更好)

dir1/src/*.f95
dir1/make/Makefile_lib1.any
dir1/make/Makefile_lib1.win
dir1/make/Makefile_lib1.unix

dir2/src/*.f
dir2/make/Makefile_lib2.any
dir2/make/Makefile_lib2.win
dir2/make/Makefile_lib2.unix

...

dir_main/src/*.f or *.f95
dir_main/make/Makefile_main.any
dir_main/make/Makefile_main.win
dir_main/make/Makefile_main.unix

我想调用make Makefile_main.unix,它会设置任何特定于Unix的变量,然后包含Makefile_main.anyMakefile_lib1.any,...

(类似于在Windows上制作)

我到了可以查看给定目录中所有源文件的阶段,例如

SRCS  := $(wildcard $(SRC_DIR)/*.$(SRC_EXT))

现在我正在努力解决如何在Fortran 95中创建所有依赖项,每个源生成*.o*.mod

有没有办法在编译时切换目录,以便所有目标/依赖项在其名称中都没有dir-path?请注意,我从Eclipse项目所在的其他服务目录调用make。有任何建议如何进行?

我真的不想做只有一个目录的通常的Fortran风格 所有的混乱与代码。

1 个答案:

答案 0 :(得分:0)

您可以采取两种主要策略。

您可以在每个子目录中放置一个makefile,并让它支持allclean等目标,然后使用顶级makefile中的递归make调用来生成相同的目标(例如{{ 1}})在每个子目录中。

或者,您可以在一次make调用中处理它,而不会递归,但是您必须使用包含子目录名称的相对路径。我个人认为没有问题,我已经基于这种方法维护了一个makefile系统。

假设all被正确设置为您需要编译的每个源的相对路径列表,那么您可以执行以下操作。

SRC
相关问题