gpt4 book ai didi

使用Makefile : how to do it right for several programs?进行编译

转载 作者:行者123 更新时间:2023-11-30 14:47:19 25 4
gpt4 key购买 nike

我正在学习如何使用 Makefile 进行编译。我想我已经理解了这个“工具”的目的,但我面临着一个问题。我正在开发一个项目,需要使用相同的 Makefile 编译多个程序。我的程序基于相同的练习,但它们必须显示不同的内容,这就是我需要五个不同的“输出程序”的原因。但它们使用相同的函数、相同的 main.c 文件等。我想找到最好的编译方式,而不需要编译我的程序常用文件的五倍。我希望我的句子可以被理解......这是我的 Makefile:

NAME0 = colle-00
NAME1 = colle-01
NAME2 = colle-02
NAME3 = colle-03
NAME4 = colle-04

SRC0 = srcs/colle_00.c
SRC1 = srcs/colle_01.c
SRC2 = srcs/colle_02.c
SRC3 = srcs/colle_03.c
SRC4 = srcs/colle_04.c

OBJ0 = colle_00.o
OBJ1 = colle_01.o
OBJ2 = colle_02.o
OBJ3 = colle_03.o
OBJ4 = colle_04.o

HDR = includes/my.h

SRCALL = srcs/ft_atoi.c \
srcs/ft_putchar.c \
srcs/main.c \
srcs/ft_print_line.c

SRCALLO = ft_atoi.o \
ft_putchar.o \
main.o \
ft_print_line.o

FLAGS = -Wall -Werror -Wextra

all: $(NAME0) $(NAME1) $(NAME2) $(NAME3) $(NAME4)

$(NAME0):
cc $(FLAGS) -I $(HDR) -c $(SRC0) $(SRCALL)
cc $(OBJ0) $(SRCALLO) -o $(NAME0)
$(NAME1):
cc $(FLAGS) -I $(HDR) -c $(SRC1) $(SRCALL)
cc $(OBJ1) $(SRCALLO) -o $(NAME1)
$(NAME2):
cc $(FLAGS) -I $(HDR) -c $(SRC2) $(SRCALL)
cc $(OBJ2) $(SRCALLO) -o $(NAME2)
$(NAME3):
cc $(FLAGS) -I $(HDR) -c $(SRC3) $(SRCALL)
cc $(OBJ3) $(SRCALLO) -o $(NAME3)
$(NAME4):
cc $(FLAGS) -I $(HDR) -c $(SRC4) $(SRCALL)
cc $(OBJ4) $(SRCALLO) -o $(NAME4)

clean:
rm -f *.o

fclean: clean
rm -f $(NAME0) $(NAME1) $(NAME2) $(NAME3) $(NAME4)

re: fclean all

我认为我有一个重新链接问题,但我很难理解如何修复它...我认为兴趣可能是仅在自创建相应的 .o 以来修改了 .c 文件时才编译它们文件,但我不确定这是否是“避免重新链接”背后隐藏的想法。

非常感谢您花时间解答我的问题!

最佳答案

我认为,你可以简单地这样做:

$(NAME0): $(SRCALLO)
cc $(FLAGS) -I $(HDR) -c $(SRC0)
cc $(OBJ0) $(SRCALLO) -o $(NAME0)
$(%.o):$(%.c)

“%.o:%.c”模式替换用于生成目标文件。请注意,如果头文件发生更改,则不会重新生成目标文件。因此,要实现这种行为,您可以检查 How can I have a Makefile automatically rebuild source files that include a modified header file? (In C/C++) .

关于使用Makefile : how to do it right for several programs?进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51458436/

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