首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Makefile用于编译不同目录中的Fortran源文件

Makefile用于编译不同目录中的Fortran源文件
EN

Stack Overflow用户
提问于 2012-11-23 08:42:51
回答 1查看 1.7K关注 0票数 0

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

以下是所需的项目结构(深度嵌套、树状结构、类似Java的结构更好)

代码语言:javascript
复制
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上制作)

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

代码语言:javascript
复制
SRCS  := $(wildcard $(SRC_DIR)/*.$(SRC_EXT))

现在,我正在为如何创建所有依赖项而苦苦挣扎,就像在Fortran95中一样,每个源代码都会生成*.o*.mod

有没有办法在编译时在目录之间切换,这样所有的目标/依赖项的名称中就不会有dir-path?注意,我是从Eclipse项目所在的某个其他服务目录调用make的。有什么建议如何进行吗?

我真的不想做通常的Fortran风格,即只有一个目录和所有乱七八糟的代码。

EN

回答 1

Stack Overflow用户

发布于 2012-11-26 21:39:01

你可以采取两种主要的策略。

您可以在每个子目录中放置一个makefile,并使其支持allclean等目标,然后从顶级makefile中使用递归make调用在每个子目录中创建相同的目标(例如all)。

或者,您可以在一次make调用中处理所有这些内容,而不需要递归,但是您必须使用包含子目录名称的相对路径。就我个人而言,我看不出它有什么问题,我维护了一个基于这种方法的makefile系统。

假设SRC被正确地设置为您需要编译的每个源代码的相对路径列表,那么您可以在这种情况下执行以下操作。

代码语言:javascript
复制
# This replaces the SRC_EXT suffix with .o in each filename
OBJ = $(SRC:%.$(SRC_EXT)=%.o)

$(BINARY_NAME): $(OBJ)
    ...link command...

%.o: %.$(SRC_EXT)
    ...compile command...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13521847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档