gpt4 book ai didi

c - 具有公共(public)目录的两个项目的 Makefile

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:55 26 4
gpt4 key购买 nike

我有两个独立的 C 项目,客户端和服务器,它们共享一些源文件。我有三个目录:服务器、客户端和公共(public)目录。我正在尝试为其中一个创建一个 Makefile,它将使用当前项目中 src/目录中的源代码和 ../common/目录中的源代码,将它们全部编译为 .o 文件并将它们放入 obj/目录中。然后将 obj/中的所有 .o 文件链接在一起。第一次尝试时,我只放了一个文件:main.c 在 src/中,并让 ../common/为空。

我当前的版本给我一个错误:

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) $@ $(LFLAGS) $(OBJECTS)
@echo "Linking complete"

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c $(CMNDIR)/%.c
@$(CC) $(CFLAGS) $< -o $@
@echo "Compiled $<"

.PHONEY: clean

clean:
@$(rm -f) $(OBJECTS)

最佳答案

在第 18 行,您有一个无效的依赖规则,格式为 target : target : dependencies。您对 $(OBJECTS) 的定义生成了一个列表,其中也包含“c”源文件,这是不正确的。最后,链接器调用缺少“-o”开关。所以我修改成这样:

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 := $(patsubst %.c,%.o,$(SOURCES))

$(TARGET): $(OBJECTS)
@$(LINKER) $(CFLAGS) -o $@ $(LFLAGS) $(OBJECTS)
@echo "Linking complete"

$(OBJDIR)/%.o : $(SRCDIR)/%.c
@$(CC) $(CFLAGS) $< -o $@
@echo "Compiled $<"

$(OBJDIR)/%.o : $(CMNDIR)/%.c
@$(CC) $(CFLAGS) $< -o $@
@echo "Compiled $<"

.PHONEY: clean

clean:
@$(rm -f) $(OBJECTS)

关于c - 具有公共(public)目录的两个项目的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22182624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com