我试图为我的Makefile中的一个特定文件设置一个if测试,以便用不同的标志来编译它。
.f90.o:
ifeq ($<,main.f90)
@echo ok $<
$(F90) -c $< -o $@
else
@echo nope $<
$(F90) $(F90FLAGS) $(DEBUG) $(INCL) -c $< -o $@
endif
...尽管我做了很多努力,但我只得到..:
nope main.f90
mpif90 -O2 -g -fbacktrace -fPIC -c main.f90 -o main.o
你使用的ifeq条件是在解析时由Make处理的,而不是在执行配方时。当你的脚本被解析时,宏$< 是空的,所以你的配方只包含后两行。
一个解决方案是提供两个配方,一个用于你的特殊情况,然后一个模式配方用于其余的情况。
main.o:main.f90
$(F90) -c $< -o $@
.f90.o:
$(F90) $(F90FLAGS) $(DEBUG) $(INCL) -c $< -o $@