我的Makefile在没有任何参数的情况下调用static
目标,但随后因为没有构建依赖项而失败。我已将依赖关系设置为隐式规则,如果我手动调用它们,make
表示没有任何事情要做(即使有)......我显然做错了什么,但我不能看看:
CC=gcc
CFLAGS=-Wall -fpic -O3
all: static shared doc
clean:
rm -rf *.o
objects=dynamicArray.o directedGraph.o linkedList.o stack.o
dynamicArray.o: indexed/dynamicArray.c indexed/dynamicArray.h
directedGraph.o: graph/directedGraph.c graph/directedGraph.h indexed/dynamicArray.h
linkedList.o: graph/linkedList.c graph/directedGraph.h graph/linkedList.h
stack.o: graph/stack.c graph/linkedList.h graph/stack.h
# Static library
static: $(objects)
$(AR) rcs libCS101.a $(objects)
# Shared library
shared: $(objects)
$(CC) -shared -o libCS101.so $(objects)
# Documentation
doc: Doxyfile $(find . -name "*.dox" -or -name "*.h")
doxygen
(doc
目标也不起作用。它不会记录find
应列出的文件中的更改,这使我相信这样的转义不正确...)
答案 0 :(得分:1)
您对各种目标文件的依赖关系不是Make的内置编译规则识别的形式。它希望直接映射%.o: %.c
。
为indexed
和graph
目录添加VPATH,然后从.c
文件名中删除这些路径组件。