gpt4 book ai didi

c - 为 Make 添加不同的对象目录

转载 作者:行者123 更新时间:2023-11-30 16:07:55 25 4
gpt4 key购买 nike

我希望我的 make 文件输出(对象文件 .o)到不同的子目录,例如 OBJECTS_DIR="./build"

我还希望将我的 .exe 放置在 DIST_DIR="./dist"

下面的 make 文件可以工作(编译和链接),但位于相同的路径中。

# vars
CXX = g++
CXXFLAGS = -c89 -Wall -g
CC = gcc
CFLAGS = -Wall -g
SOURCES_C = main.c A.c B.c C.c D.c E.c
INCLUDES=
OBJECTS_DIR=./build
DIST_DIR=./dist
PROGRAM = main

OBJECTS = $(SOURCES_C:.c=.o)

debug := CFLAGS

all debug: $(PROGRAM)

$(PROGRAM): $(INCLUDES) $(OBJECTS)
$(LINK.c) -o $@ $(OBJECTS)


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

如何实现将 .o 文件输出到 OBJECTS_DIR,然后从 OBJECTS_DIR 链接并将 .exe 输出到 DIST_DIR。

根据用户建议更新:

# vars
CXX = g++
CXXFLAGS = -Wall -g
CC = gcc
CFLAGS = -std=c89 -Wall -g
SOURCES_C = main.c A.c B.c C.c D.c E.c
OBJECTS_DIR := build
OBJECTS := $(SOURCES_C:%.c=$(OBJECTS_DIR)/%.o)
INCLUDES :=
DIST_DIR := dist
PROGRAM := $(DIST_DIR)/main
OBJECTS = $(SOURCES_C:.c=.o)

debug := CFLAGS

all debug: $(PROGRAM)

$(PROGRAM): $(INCLUDES) $(OBJECTS)
$(CC) -o $@ $(OBJECTS)


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

我按预期更新了我的 Make 及其工作。我一直依赖 IDE 来生成我的 Makefile。

1)是否有任何我不知道的问题?

2) .PHONY 的意义是什么(仍然不明白)。

谢谢

最佳答案

以下 makefile 尚未经过测试

请注意使用“:=”来定义宏,因此宏只需要计算一次

注意:“.PHONY:”语句是告诉 make 不会生成具有关联名称(clean、all)的文件

根据 Chris Dodd 评论进行编辑

CC           :=  /usr/bin/gcc
RM := /bin/rm
CFLAGS := -Wall -g -Wextra -Wconversion -pedantic -std=gnu11
SOURCES_C := main.c A.c B.c C.c D.c E.c
OBJECTS_DIR := build
DIST_DIR := dist
PROGRAM := $(DIST_DIR)/main
OBJECTS := $(SOURCES_C:.c=$(OBJECTS_DIR)/%.o)

.PHONY: all
all: $(PROGRAM)

$(PROGRAM): $(OBJECTS)
$(CC) -o $@ $(OBJECTS)

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

.PHONY: clean
clean:
rm -f $(PROGRAM)
rm -f $(OBJECTS)

关于c - 为 Make 添加不同的对象目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59494679/

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