【发布时间】:2016-01-05 21:15:58
【问题描述】:
我对 Makefile 没有太多经验,所以答案可能很明显。但是,我无法在 GNU make 手册或 stackoverflow 的其他地方找到我要查找的内容。这个问题我遇到过几次,所以我做了一个示例项目来演示它。
我有目录:
- src/ 用于 .c 文件
- 为正在构建的库构建/
- obj/ 用于所有 .o 文件(一个从不同项目编译的文件)
它的样子:
$ ls -l
total 0
drwxrwxr-x+ 1 sam None 0 Jan 5 15:43 build
drwxrwxr-x+ 1 sam None 0 Jan 5 15:43 obj
drwxrwxr-x+ 1 sam None 0 Jan 5 15:42 src
我的 Makefile:
CC=gcc
CFLAGS=-Wall
SOURCES=$(wildcard src/*.c)
SOURCE_OBJECTS=$(patsubst src/%.c,obj/%.o,$(SOURCES))
OBJECTS=$(wildcard obj/*.o)
HASHSRC=/cbib/libhash/src/hash.c
TARGET=target.a
all: $(TARGET)
$(TARGET): $(OBJECTS)
ar rcs $@ $^
obj/%.o: src/%.c
$(CC) -o $@ $^ $(CFLAGS)
obj/hash.o: $(HASHSRC)
$(CC) -o $@ $^ $(CFLAGS)
规则
obj/%.o: src/%.c
捕获 obj/ 目录中的所有 .o 文件。但是我只希望它捕获 SOURCE_OBJECTS 中列出的文件,并从 src/ 目录中的相应文件编译它们。我该怎么做?
【问题讨论】: