makefile - 通用 Makefile 在 FreeBSD 上不起作用

标签 makefile freebsd cc

请注意,这不是名为 generic makefile 的其他问题的重复。

我已按照有关通用 makefile 的其他问题的所有说明进行操作,这是我从中得出的代码:

CFLAGS = -c
CC = cc
SOURCES = $(wildcard *.cc)
OBJECTS = $(patsubst %.cc,%.o,%(SOURCES))
EXEC = run

all: build clean

build: $(OBJECTS)
    $(CC) $(OBJECTS) -o $(EXEC)

%.o: %.cc
    $(CC) $(CFLAGS) $<

clean:
    rm *.o

但是,当我执行 make 时文件名为 test.cc在我的目录中,它给了我以下错误:
cc    -o run
cc: error: no input files
*** Error code 1

Stop.
make: stopped in /somewhere

请注意,我使用的是 FreeBSD 和 makecc命令是操作系统附带的命令。

最佳答案

线条

SOURCES = $(wildcard *.cc)
OBJECTS = $(patsubst %.cc,%.o,%(SOURCES))

是 GNU make 语法,FreeBSD 无法理解 make ,它有自己的方言(特别是 $(wildcard)$(patsubst) )。如果您需要编写可移植到许多系统的 makefile,要么要求 gmake 存在并使用 GNUmakefile,要么坚持使用 features of POSIX make .

您可以使用以下命令在 FreeBSD 上安装 GNU make ( gmake )
cd /usr/ports/devel/gmake
make install clean

关于makefile - 通用 Makefile 在 FreeBSD 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28263797/

相关文章:

对应的gcc选项?

makefile - 找不到 cl.h - 如何在生成文件中链接

shell - BSD 环境;从脚本运行时出现错误 "unescaped newline inside substitute pattern"

c - main() 中的结构定义导致段错误

freebsd - 关于在 FreeBSD 中编写我自己的系统调用的问题

c - kill - 它会立即终止进程吗?

makefile - GNU make : “Nothing to be done for ' target'” vs. “' 目标'是最新的”

gcc - 使用gcc8.1.1编译gcc6.4.0

c - 将一个开源项目包含到另一个项目中