gpt4 book ai didi

Makefile - 移动目标文件

转载 作者:行者123 更新时间:2023-12-02 06:29:22 27 4
gpt4 key购买 nike

经过一番搜索,我成功地将以下 Makefile 组合在一起:

CC = gcc
CFLAGS = -c -Wall
LDFLAGS =
SOURCEFILES = main.c
SOURCES = src/$(SOURCEFILES)
OBJECTS = $(SOURCES:.c=.o)
EXECUTABLE = netsim

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@

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

clean:
rm -rf netsim $(OBJECTS)

我希望能够将我的目标文件移动到另一个目录中,但一直在努力使其工作。我错过了什么?

最佳答案

诀窍是不要移动你的物体。
您应该构建它从构建它们的地方使用它

例如,您有以下目录结构:

$ tree .
├── Makefile
├── include
│   └── common_head.h
├── obj
└── src
├── foo.c
└── main.c

手动执行:

$ gcc -o ./obj/foo.o  -c ./src/foo.c  -I ./include  # Build Object #
$ gcc -o ./obj/main.o -c ./src/main.c -I ./include
$ gcc -o exe ./obj/foo.o ./obj/main.o # Build Executable #
<小时/>

Makefile 来模拟上述内容

C_FLAGS := -g -Wall -Wextra
CC := gcc
RM := rm
LINKFLAGS := -lanylibrary

.PHONY: $(TARGET)
.PHONY: clean

VPATH:= ./src/ ./obj/ ./include/

# Path for .c , .h and .o Files
SRC_PATH := ./src/
OBJ_PATH := ./obj/
INC_PATH := -I ./include

# Executable Name
TARGET := exe

# Files to compile
OBJ1 := foo.o \
main.o

OBJ := $(patsubst %,$(OBJ_PATH)%,$(OBJ1))

# Build .o first
$(OBJ_PATH)%.o: $(SRC_PATH)%.c
@echo [CC] $<
@$(CC) $(C_FLAGS) -o $@ -c $< $(INC_PATH)

# Build final Binary
$(TARGET): $(OBJ)
@echo [INFO] Creating Binary Executable [$(TARGET)]
@$(CC) -o $@ $^ $(LINKFLAGS)

# Clean all the object files and the binary
clean:
@echo "[Cleaning]"
@$(RM) -rfv $(OBJ_PATH)*
@$(RM) -rfv $(TARGET)
<小时/>

所以当你做 Make 时

$ make -B
[CC] src/foo.c
[CC] src/main.c
[INFO] Creating Binary Executable [exe]

要查看试运行,请使用 make -n

$ make clean ; make -n
g++ -g -Wall -Wextra -o obj/foo.o -c src/foo.c -I ./include
g++ -g -Wall -Wextra -o obj/main.o -c src/main.c -I ./include
g++ -o exe obj/foo.o obj/main.o -lanylibrary
<小时/>

因此,构建后您的目录结构应如下所示。

$ tree .
├── Makefile
├── exe
├── include
│   └── common_head.h
├── obj
│   ├── foo.o
│   └── main.o
└── src
├── foo.c
└── main.c

从我之前的回答来看。
您不必使用任何PHONY move,也不会不必要地重新创建对象。

关于Makefile - 移动目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26028834/

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