BSD make <> GNU make

问题描述 投票:0回答:2

我有一个 Makefile。
在安装了 gmakemake 的 FreeBSD 机器上,我使用这两个工具运行相同的 Makefile。
makegmake的输出日志不一样。为什么是这样?我该如何“解决”这个问题?

日志如下:

$ gmake

compile main.cpp
linking myout

$ 制作

c++  -O2 -pipe -c main.cpp -o main.o
linking myout

$猫Makefile

TARGET = myout

default: $(TARGET)

SRCS = main.cpp

OBJS = $(SRCS:%.cpp=%.o)

default: $(BIN)

%.o: %.cpp
    @echo compile $<
    @$(CXX) -c $< -o $@

$(TARGET): $(OBJS)
    @echo linking $@

    @$(CXX) $(OBJS) -o $@

clean:
    @rm -f $(OBJS) $(TARGET)
makefile gnu-make freebsd bsdmake
2个回答
2
投票

根据 FreeBSD make 文档,它不支持模式规则。所以你的规则是:

%.o: %.cpp
        @echo compile $<
        @$(CXX) -c $< -o $@

在 FreeBSD 中 make 只是一个明确的规则,告诉 make 如何从文字文件

%.o
构建文字文件
%.cpp
。由于您没有尝试构建名为
%.o
的文件(您正在尝试构建
main.o
),因此该规则将被忽略/从未使用。

如果您想要在两个版本的 make 之间以相同的方式工作,您必须将自己限制为 POSIX 标准后缀规则格式,如下所示:

.SUFFIXES: .cpp .o
.cpp.o:
        @echo compile $<
        @$(CXX) -c $< -o $@

0
投票

默认的构建实用程序不同。 FreeBSD 使用与 GNU/Linux 不同的 make 实现。各自的手册页概述了差异。

https://forums.freebsd.org/threads/difference-gmake-gnu-and-freebsd-make.28784/

© www.soinside.com 2019 - 2024. All rights reserved.