如何在构建目录中生成目标文件?
How to generate object files in the build directory?
我目前正在开发一个 C 项目来实现 Linux 用户空间应用程序。
我写了这个 Makefile,它允许我编译 :
PROJ_DIR := ../
SRC_DIR := $(PROJ_DIR)/src
BUILD_DIR := $(PROJ_DIR)/build
# define the executable file
TARGET := tcp_proxy
# include paths list
INC_DIRS := $(SRC_DIR)
INC_DIRS += $(SRC_DIR)/rpmsg
INC_DIRS += $(SRC_DIR)/rpmsg/rx
INC_DIRS += $(SRC_DIR)/rpmsg/tx
INC_DIRS += $(SRC_DIR)/tcp
INC_DIRS += $(SRC_DIR)/tcp/rx
INC_DIRS += $(SRC_DIR)/tcp/tx
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
# source file list
SRCS := $(shell find $(SRC_DIR) -name *.c)
# object file list
OBJS := $(SRCS:.c=.o)
LDFLAGS := -pthread
all: tcp_proxy
tcp_proxy: $(OBJS)
$(CC) $(CFLAGS) $(INC_FLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)
%.o: %.c
$(CC) $(CFLAGS) $(INC_FLAGS) -c $< -o $@
.PHONY: clean
clean:
$(RM) *.o *~ $(TARGET)
但是,目标文件是在与源文件相同的位置生成的。
所以我想知道如何在“build”目录中复制“src”下的文件夹并在该目录中生成目标文件和可执行文件。
我还希望在执行 make clean 时能够删除所有目标文件和可执行文件。
我的项目:
搜索肯定会找到很多这方面的示例和信息。
首先告诉make你要构建什么对象;将 OBJS
的设置更改为:
# object file list
OBJS := $(SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
然后告诉make如何构建它;将构建对象的模式规则更改为:
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(@D)
$(CC) $(CFLAGS) $(INC_FLAGS) -c $< -o $@
我目前正在开发一个 C 项目来实现 Linux 用户空间应用程序。 我写了这个 Makefile,它允许我编译 :
PROJ_DIR := ../
SRC_DIR := $(PROJ_DIR)/src
BUILD_DIR := $(PROJ_DIR)/build
# define the executable file
TARGET := tcp_proxy
# include paths list
INC_DIRS := $(SRC_DIR)
INC_DIRS += $(SRC_DIR)/rpmsg
INC_DIRS += $(SRC_DIR)/rpmsg/rx
INC_DIRS += $(SRC_DIR)/rpmsg/tx
INC_DIRS += $(SRC_DIR)/tcp
INC_DIRS += $(SRC_DIR)/tcp/rx
INC_DIRS += $(SRC_DIR)/tcp/tx
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
# source file list
SRCS := $(shell find $(SRC_DIR) -name *.c)
# object file list
OBJS := $(SRCS:.c=.o)
LDFLAGS := -pthread
all: tcp_proxy
tcp_proxy: $(OBJS)
$(CC) $(CFLAGS) $(INC_FLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)
%.o: %.c
$(CC) $(CFLAGS) $(INC_FLAGS) -c $< -o $@
.PHONY: clean
clean:
$(RM) *.o *~ $(TARGET)
但是,目标文件是在与源文件相同的位置生成的。 所以我想知道如何在“build”目录中复制“src”下的文件夹并在该目录中生成目标文件和可执行文件。
我还希望在执行 make clean 时能够删除所有目标文件和可执行文件。
我的项目:
搜索肯定会找到很多这方面的示例和信息。
首先告诉make你要构建什么对象;将 OBJS
的设置更改为:
# object file list
OBJS := $(SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
然后告诉make如何构建它;将构建对象的模式规则更改为:
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(@D)
$(CC) $(CFLAGS) $(INC_FLAGS) -c $< -o $@