2014-11-05 59 views
0

我有几个模块,我想编译,可以说foobar使目标依赖于其子目录中的多个文件

$MODULES = foo bar 

他们每个人都在使用相同名称的单独的子目录(如source/foo/foo.o),所以我的目标文件是:

$MODULE_OBJ := $(foreach module, $(MODULES), source/$(module)/$(module).o) 

现在,我想编写一个通用的规则,两个模块,因此它们依赖于其子目录的所有源文件(例如source/foo/*.f90),但仅需要与模块一样命名的模块来编译它(例如$(FC) -c source/foo/foo.f90就是配方)。我读过这通常使用evalcall解决。这对我不起作用;我试图输出调试的先决条件,但没有运气。以下是我已经试过:

define modulerule 
$(1): $$(dir $(1))*.f90 
    $$(info prereq = $$^) 
    $$(FC) -c $$(basename [email protected]).f90 
endef 

$(foreach obj, %(MODULE_OBJ), $(eval $(call modulerule, $(obj)))) 
+0

为什么不简化的东西,由具有顶层make文件,然后调用使递归地在每个模块目录中?然后在模块目录中,您可以有一个特定于该模块的生成文件。 – 2014-11-05 14:44:26

+0

@TimothyBrown递归Make是一个非常糟糕的主意,它不起作用,Make不是为此设计的。阿门。 – 2014-11-05 21:29:09

回答

相关问题