带有针对特定文件的“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 $@