Makefile 不会遍历所有的源文件?
Makefile does not iterate over all the source files?
我想编译许多源文件并从中构建一个库。
我的 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
(注意:你可以不用编译规则,因为默认值可能已经足够好了)
我想编译许多源文件并从中构建一个库。
我的 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
(注意:你可以不用编译规则,因为默认值可能已经足够好了)