1
我有两个单独的C项目,客户端和服务器,共享一些源文件。我有三个dirs:服务器,客户端和通用。我正在尝试为其中一个创建一个Makefile,它将使用当前项目中的src/dir源文件和../common/ dir中的源文件,将它们全部编译为.o文件并将它们放入obj/dir中。然后将所有.o文件从obj /链接在一起。对于第一次尝试,我只放了一个文件:main.c在src /中,并且剩下../common/为空。具有公共目录的两个项目的Makefile
我目前的版本给我一个错误:
Makefile:18: target `src/main.c' doesn't match the target pattern
make: *** No rule to make target `../common/main.c', needed by `obj/main.o'. Stop.
这里是我的尝试:
TARGET = server
CC = gcc -c
LINKER = gcc
CFLAGS = -Wall -Wextra -pedantic -O2 -g -std=gnu99
SRCDIR = src
CMNDIR = ../common
OBJDIR = obj
SOURCES := $(wildcard $(SRCDIR)/*.c) $(wildcard $(CMNDIR)/*.c)
INCLUDES := $(wildcard $(SRCDIR)/*.h) $(wildcard $(CMNDIR)/*.h)
OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o) $(SOURCES:$(CMNDIR)/%.c=$(OBJDIR)/%.o)
$(TARGET): $(OBJECTS)
@$(LINKER) $(CFLAGS) [email protected] $(LFLAGS) $(OBJECTS)
@echo "Linking complete"
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c $(CMNDIR)/%.c
@$(CC) $(CFLAGS) $< -o [email protected]
@echo "Compiled $<"
.PHONEY: clean
clean:
@$(rm -f) $(OBJECTS)