我想编译许多源文件并从中构建一个库。
我的 makefile 大致如下所示:
SOURCES := /home/test/src/\*.c
OBJECTS := $(SOURCES:.c=.o)
.PHONY: compileLibrary
compileLibrary:
$(CC) -fPIC -c $(SOURCES) -o $(OBJECTS)
$(CC) -shared -o libshared.so $(OBJECTS)
过程如何不遍历每个源文件,似乎 makefile 没有用它的值替换 SOURCES
中的 *。
最佳答案
*.c
,就其本身而言,是不展开的,你必须使用wildcard
函数(如$(wildcard *.c)
)- 是
*.c
,不是\*.c
。\
是转义,去掉*
的特殊含义。 - 显然您的 makefile 不应包含绝对路径。通常,当前目录必须是 makefile 所在的目录,因此请充分利用它。
您应该实际使用 make 的功能:
libshared.so: $(OBJECTS) $(CC) -shared -o $@ $< compileLibrary: libshared.so
(注意:您可以不用编译规则,因为默认值可能就足够了)
关于c - Makefile 不会遍历所有的源文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40103551/