带有针对特定文件的“ifeq”测试的 Makefile
Makefile with `ifeq` test for specific file
我正在尝试为我的 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 $@
我正在尝试为我的 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 $@