c - Makefile 不会遍历所有的源文件?

标签 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. *.c,就其本身而言,是不展开的,你必须使用wildcard函数(如$(wildcard *.c))
  2. *.c,不是\*.c\是转义,去掉*的特殊含义。
  3. 显然您的 makefile 不应包含绝对路径。通常,当前目录必须是 makefile 所在的目录,因此请充分利用它。
  4. 您应该实际使用 make 的功能:

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

    (注意:您可以不用编译规则,因为默认值可能就足够了)

关于c - Makefile 不会遍历所有的源文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40103551/

相关文章:

c - 为什么这个显式转换的结果与隐式转换的结果不同?

linux - 有没有办法只编译 POSIX API

makefile - 你如何制作一个makefile

javascript - 创建不封装 Javascript 的库

c++ - LLVM JIT 编译的程序找不到外部函数

c - 在 C 中提取整数(假设 32 位整数)中的 8 个半字节有哪些方法?

c - 一个 C 程序演示 cmd.exe 和一个 linux shell 例如bash,定界参数?

java - 当使用 StandardOpenOption.SYNC 打开底层 channel 时,我们是否必须刷新 MappedByteBuffer

c - 将基于 makefile 的 C 项目导入 IDE

c++ - 构造函数的链接时自动注册