【问题标题】:GNU Make Pattern Rule on MacOS XMacOS X 上的 GNU Make Pattern Rule
【发布时间】:2012-08-06 17:09:36
【问题描述】:

我正在为 OS X Lion 上的 makefile 苦苦挣扎。我正在尝试使用 % 模式规则将我的所有 .c 文件编译为当前目录中的对象。我正在使用规则:

%.o : %.c                                                                      
    $(CC) -c $(CFLAGS) $< -o $@ 

但是 make 说没有目标。我知道 % 模式是 gMake 的功能,但是 -v 说我已经安装了 GNU make。我也尝试过旧式:

 .cpp.o:
        gcc $^ -o $@

但它不起作用。我做错了什么?谢谢。

【问题讨论】:

  • MacPorts 尝试gmake
  • 您的输入文件是.c 文件还是.cpp 文件?
  • 我的例子只是例子。实际上,我搜索.cc 文件。 %.o: %.cc $(CXX) -c $(CXXFLAGS) $^ -o $@
  • 我已经解决了。我尝试使用带有 vpath 的模式在单独的文件夹中构建。我已经更改了我的文件夹结构以构建单个文件夹,并且模式运行良好。我不知道为什么,我认为它应该与 vpath 一起工作。

标签: macos build makefile gnu gnu-make


【解决方案1】:

如果这是您的整个 Makefile,那么它确实不包含目标。使用make file.o 调用它或添加一个虚假目标all,其中列出了您要构建的文件的名称。可以很简单

.PHONY: all
all: $(patsubst %.cpp,%.o,$(wildcard *.cpp))

你所拥有的是模式规则,它指定“如果你想构建一个*.o 类型的目标,这里是如何做到这一点”,但没有指定“这是我们要构建的文件”的实际目标。

顺便说一句,GNU Make 已经知道如何编译 C 文件,因此您实际上不需要定义它,除非您特别需要覆盖内置模式规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 2015-06-19
    • 2015-03-14
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多