Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MacOS X上的GNU生成模式规则_Macos_Build_Makefile_Gnu_Gnu Make - Fatal编程技术网

MacOS X上的GNU生成模式规则

MacOS X上的GNU生成模式规则,macos,build,makefile,gnu,gnu-make,Macos,Build,Makefile,Gnu,Gnu Make,我正在努力使用OSX Lion上的makefiles。我正在尝试使用%模式规则将所有.c文件编译为当前目录中的对象。我正在使用规则: %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ 但这是不工作的。我做错了什么?谢谢。如果这是您的整个Makefile,那么实际上,它不包含任何目标。使用makefile.o调用它,

我正在努力使用OSX Lion上的makefiles。我正在尝试使用%模式规则将所有.c文件编译为当前目录中的对象。我正在使用规则:

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

但这是不工作的。我做错了什么?谢谢。

如果这是您的整个Makefile,那么实际上,它不包含任何目标。使用
makefile.o
调用它,或者添加一个虚假的目标
all
,其中列出了要生成的文件的名称。它可以简单到

.PHONY: all
all: $(patsubst %.cpp,%.o,$(wildcard *.cpp))
您拥有的是模式规则,其中指定“如果您想要构建类型为
*.o
的目标,下面介绍如何实现”,但没有指定“这是我们想要构建的文件”的实际目标


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

请尝试从。您的输入文件是
.C
文件还是
.cpp
文件?我的示例只是示例。在real中,我搜索
.cc
文件<代码>%.o:%.cc$(CXX)-c$(cxflags)$^-o$@我已经解决了它。我尝试在单独的文件夹中使用vpath模式进行构建。我已经改变了我的文件夹结构,以建立在单一的文件夹和模式工作得很好。我不知道为什么,我认为它应该与vpath配合使用。
.PHONY: all
all: $(patsubst %.cpp,%.o,$(wildcard *.cpp))