gpt4 book ai didi

c - 带有通用文件的多个可执行文件的 Makefile

转载 作者:行者123 更新时间:2023-11-30 17:45:53 25 4
gpt4 key购买 nike

我需要帮助编写一个 makefile,该文件创建两个依赖于公共(public)文件的独立可执行文件。所以,我有三个源文件:Master.c Common.c Worker.c,以及三个相应的头文件。现在,Master.c 包括 Master.h 和 Common.h。同样,Worker.c 包括 Worker.h 和 Common.h。我想使用相同的 makefile 创建两个可执行文件,即 Master 和 Worker。我有以下 makefile,但它无法正常运行,因为对于 Common.h 中声明的每个全局变量,当我键入 make 时,我收到错误“多个声明”。请注意,我在所有头文件中都使用了#indef、#define 和#endif。

CC = gcc
CFLAGS= -g -I -pthread -lpthread -std=c99
DEPS = Common.h
OBJ1 = Master.o Common.o
OBJ2 = Worker.o Common.o

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

all: Master Worker

Master: $(OBJ1)
gcc -o $@ $^ $(CFLAGS)

Worker: $(OBJ2)
gcc -o $@ $^ $(CFLAGS)

clean:
rm -f *.o

请帮忙

最佳答案

不要将全局变量的定义放在标题中;相反,将它们放在一个源文件中,并且仅声明 header 中的变量:

Common.h:

extern int foo;    /* declaration only */

Common.c:

#include "Common.h"

int foo; /* definition */

否则,在多个翻译单元中包含 header 将违反单一定义规则。

关于c - 带有通用文件的多个可执行文件的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19527657/

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