gpt4 book ai didi

使用 makefile 编译 header 依赖项

转载 作者:太空狗 更新时间:2023-10-29 15:38:53 24 4
gpt4 key购买 nike

我正在使用 C 编程语言编写 UDP 客户端服务器应用程序;我想在依赖关系发生变化时自动编译 2 个源文件和 3 个头文件,所以我决定使用 make 实用程序。

生成文件目标称为“编辑”:

    edit : server_UDP.o  client_UDP.o \
gcc -o edit server_UDP.o client_UDP.o \


client_UDP.o : client_UDP.c cliHeader_UDP.h wrapHeader.h
gcc -c client_UDP.c

server_UDP.o : server_UDP.c servHeader_UDP.h wrapHeader.h
gcc -c server_UDP.c

当我更改 wraphHeader.h 中的几行代码时,它不会触发重新编译。

当 wrapheader.h 发生变化以重新编译 server_UDP 和 client_UDP 时,如何修改编辑 makefile 规则?

**注意:wrapHeader.h 是主要的头文件

cliHeader_UDP.h : 包括“wrapHeader.h”

servHeader_UDP.h : 包括“wrapHeader.h”

最佳答案

我想你想要的是制作依赖文件。

您可以使用'-MMD -MP'参数指定编译器为您生成一个依赖文件,它会在同一文件夹中创建一个与源文件同名但扩展名为*.d的新文件作为您的来源。

依赖文件包含代码所依赖的所有头文件,如果它使用的头文件被修改,这将导致 GNU make 编译您的源文件。

启用 makefile 的示例依赖文件:

# Makefile

CC := gcc
LD := g++

# The output executable.
BIN := program

# Toolchain arguments.
CFLAGS :=
CXXFLAGS := $(CFLAGS)
LDFLAGS :=

# Project sources.
C_SOURCE_FILES := mysourcefile1.c src/myothersrc.c
C_OBJECT_FILES := $(patsubst %.c,%.o,$(C_SOURCE_FILES))

# The dependency file names.
DEPS := $(C_OBJECT_FILES:.o=.d)

all: $(BIN)

clean:
$(RM) $(C_OBJECT_FILES) $(DEPS) $(BIN)

rebuild: clean all

$(BIN): $(C_OBJECT_FILES)
$(LD) $(C_OBJECT_FILES) $(LDFLAGS) -o $@

%.o: %.c
$(CC) -c -MMD -MP $< -o $@ $(CFLAGS)

# Let make read the dependency files and handle them.
-include $(DEPS)

这应该适合您的情况:

SOURCES := server_UDP.c client_UDP.c
OBJECTS := $(patsubst %.c,%.o,$(SOURCES))

DEPS := $(OBJECTS:.o=.d)

edit: $(OBJECTS)
gcc -o edit $(OBJECTS)

%.o: %.c
gcc -c $< -o $@

-include $(DEPS)

关于使用 makefile 编译 header 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15857837/

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