“如何阻止”;制造;makefile中的命令

“如何阻止”;制造;makefile中的命令,makefile,Makefile,我编写makefile,其结构如下 #... Configure basic flags for compiler .PHONY: mk_mingw mk_mingw: # build with mingw(windows) .PHONY: mk_gcc_linux mk_gcc_linux: # build in gcc(linux) #... some auxiliary unit such as clear, test ... 使用mingw(windows)构建时,请使用以下命令

我编写makefile,其结构如下

#... Configure basic flags for compiler

.PHONY: mk_mingw
mk_mingw:
# build with mingw(windows)

.PHONY: mk_gcc_linux
mk_gcc_linux:
# build in gcc(linux)

#... some auxiliary unit such as clear, test ...
使用mingw(windows)构建时,请使用以下命令

#命令1
$make mk_mingw
使用gcc(Linux)构建时使用以下命令

#命令2
$make mk_gcc_linux
我希望以上两个命令在我的项目中是合法的

mk_gcc_linux和mk_mingw是编译器的环境(我指定)

但以下命令不是:

#命令3
$make
因为它不是在make命令之后指定编译器的环境

我想报告一个错误并在这种情况(命令3)发生时停止


在makefile中如何操作?

默认情况下,
make
尝试构建第一个目标。因此,您可以简单地将其放在Makefile的顶部:

.PHONY: first
first:
    @echo Environment not specified!
    @false
# the rest of file is following...

但对我来说,它看起来不太正确。也许,设置一个变量而不是一个专门的目标会更好。

我认为这很好,事实上,我已经看到了这种方法的实践。我认为基于目标的选择比基于变量的选择更符合
make
的习惯用法,但我想这在某种程度上取决于你在每种情况下的实际操作。@JohnBollinger好吧,这取决于你是对的。但是,很可能还需要根据目标平台调整一些其他变量。而且从目标的配方里面做这件事不是很方便。因此,我们要么解析
MAKECMDGOALS
,要么进入递归make。对我来说,变量看起来更灵活。