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 中的 *。

  1. *.c 本身不会扩展,您必须使用 wildcard 函数(如 $(wildcard *.c)
  2. *.c,不是\*.c\是转义,去除了*.
  3. 的特殊含义
  4. 显然您的 makefile 不应包含绝对路径。通常当前目录必须是 makefile 所在的目录,因此请利用它。
  5. 您应该实际使用 make 的功能:

    libshared.so: $(OBJECTS)
            $(CC) -shared -o $@ $<
    compileLibrary: libshared.so
    

    (注意:你可以不用编译规则,因为默认值可能已经足够好了)