gpt4 book ai didi

makefile - make 'vpath' 指令,为什么它不足以满足这个先决条件?

转载 作者:行者123 更新时间:2023-12-04 17:58:21 26 4
gpt4 key购买 nike

以下示例 makefile 按预期工作,使用 vpath 查找目标文件和源文件。但是在最后一行,我告诉 make 一个目标文件对另一个目标文件的依赖性,我需要指定先决条件文件的目录 $(objd)/ ,否则我会得到一个错误(请参阅代码下方的错误消息)。为什么 vpath 指令在最后一行中不够用?

# Program Name
prog = avpar

#dirs
objd=obj
modd=mod


# extra places to search for prerequisites
vpath %.f90 ../modules
vpath %.o obj/

# etc
FC = gfortran
flags = -I$(modd) -J$(modd) #-fopenmp

obj_files = $(prog).o rw_mod.o

# compile
p$(prog): $(obj_files)
$(FC) $(flags) $^ -o $@

$(objd)/%.o: %.f90
$(FC) $(flags) -c $< -o $@

$(objd)/$(prog).o: $(objd)/rw_mod.o

即将最后一行改为:

$(objd)/$(prog).o: rw_mod.o

给出错误:

make: *** No rule to make target 'rw_mod.o', needed by 'obj/avpar.o'.  Stop.

编辑使用这种形式的最后几行它也可以工作,没有目录规范:

#compile
p$(prog): $(obj_files)
$(FC) $(flags) $^ -o $@

$(objd)/rw_mod.o: rw_mod.f90
$(FC) $(flags) -c $< -o $@

$(objd)/$(prog).o: $(prog).f90 rw_mod.o
$(FC) $(flags) -c $< -o $@

最佳答案

vpath 只能用于查找存在的先决条件。

Makefiles rule 3

Use VPATH to locate the sources from the objects directory, not to locate the objects from the sources directory.

没有匹配 rw_mod.o 的规则,所以 obj/avpar.o 的规则失败,vpath 不会在先决条件规则查找,它在这里工作的唯一方法是如果 obj/rw_mod.o 已经存在。

无论如何,规则不太可能是正确的,为什么一个目标文件会依赖于另一个目标文件?

关于makefile - make 'vpath' 指令,为什么它不足以满足这个先决条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38405827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com