Makefile不会遍历所有源文件?

时间:2016-10-18 08:44:00

标签: c makefile shared-libraries

我想编译许多源文件并从中构建一个库。

我的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 个答案:

答案 0 :(得分:4)

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

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

    (注意:你可能没有编译规则,因为默认情况可能已经足够了)