Makefile跳过依赖

时间:2018-02-11 02:10:17

标签: makefile gnu-make

我为我的小项目创建了一个makefile

.SUFFIXES:

%.cpp:
    $(COMP) -c -o $(subst .cpp,.o,$@) $(SRCDIR)$@ $(CFLAGS)

platformL: COMP:=gcc
platformL: $(FILES)
    $(COMP) -o $(NAME) $(subst .cpp,.o,$(FILES)) $(CFLAGS)
    rm $(subst .cpp,.o,$(FILES))

platformW: COMP:=wine gcc
platformW: $(FILES)
    $(COMP) -o $(NAME).exe $(subst .cpp,.o,$(FILES)) $(CFLAGS)
    rm $(subst .cpp,.o,$(FILES))

default: platformL platformW
    echo Done!

一切正常,直到我分支到两个不同的平台,' make'命令仅执行我的platformL分支。花了一些时间,我发现添加' .PHONY'不解决问题。此外,似乎只有顶部的第一个分支被执行(我在platformL之前放置了platformW的行,并且只执行了Windows编译)。

如何让它执行两个分支?

1 个答案:

答案 0 :(得分:0)

默认情况下,make始终在makefile中构建第一个显式目标(以及第一个显式目标的所有先决条件)。它默认会构建它。

您可以在命令行中指定要构建的多个内容,例如make platformL platformW,也可以添加新的第一个目标,该目标取决于您要构建的所有其他目标。根据传统,目标名为all,但您可以随意调用它:

all: platformL platformW
.PHONY: all

  ...
platformL: ...
  ...
platformW: ...