Make中的默认规则

not*_*oop 4 makefile compilation rules go

是否有一种机制可以允许在任何地方使用的默认全局隐式规则,类似于内置规则?

Make为编译C/C++/Fortran文件提供了一些内置的隐式规则,甚至不需要Makefile简单的案例.但是,在编译其他语言(例如Go编程语言文件)时,Makefile始终需要a.我想扩展我的Makeenvironment默认情况下可以使用隐式规则.

dma*_*oni 6

这通常不是理想的,因为它会导致Makefile的可移植性降低; 如果他们没有以这种方式进行设置,它就无法在别人的机器上运行.

但是,如果要执行此操作,请使用Go文件的默认规则在某处创建"全局"Makefile,然后将其路径添加到MAKEFILES环境变量中.当您运行"make"时,将在任何Makefile之前处理此全局Makefile,就像您将其源包含在文件顶部一样.


psm*_*ars 5

我假设你指的是你可以做的事实

make hello.o
Run Code Online (Sandbox Code Playgroud)

并且 make 将自动知道如何.o.c文件(或者实际上从 a .for .p,如果存在的话)创建 - 但您想为自定义文件类型执行此操作(例如,.bar.foo.

最可移植的方法如下(在您的 Makefile 中):

.SUFFIXES: .foo .bar
.foo.bar:
        foo2bar -in $> -out $@
Run Code Online (Sandbox Code Playgroud)

第一行 ( .SUFFIXES) 警告您将把它们视为特殊后缀;.bar第二行说“这是从 a制作 a 的方法.foo。第三行给出了执行此操作的命令 -$>$@通过 make 更改输入和输出文件名。

注意:第三行的缩进必须是制表符。

一种更灵活的方法(仅适用于 GNU make)是使用其对隐式规则的支持。如果你能保证你会使用 GNU make 那么这可能是值得推荐的。