首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将不同目录下的源码编译成同一目录下的目标文件(Makefile)?

将不同目录下的源码编译成同一目录下的目标文件可以通过使用Makefile来实现。Makefile是一个文本文件,它定义了一系列规则和命令,用于指导编译器如何将源代码转换为目标文件。

下面是一个示例的Makefile文件,用于将不同目录下的源码编译成同一目录下的目标文件:

代码语言:txt
复制
# 定义编译器
CC = gcc

# 定义编译选项
CFLAGS = -Wall -O2

# 定义目标文件输出路径
OUTPUT_DIR = ./output

# 定义源码文件目录
SOURCE_DIRS = ./dir1 ./dir2 ./dir3

# 查找所有源码文件
SOURCES := $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))

# 将源码文件替换为目标文件的文件路径
OBJS := $(patsubst %.c,$(OUTPUT_DIR)/%.o,$(notdir $(SOURCES)))

# 定义目标文件名
TARGET = $(OUTPUT_DIR)/target

all: $(TARGET)

$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) -o $@ $^

$(OUTPUT_DIR)/%.o: $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    rm -rf $(OUTPUT_DIR)/*

.PHONY: all clean

上述Makefile文件中,使用变量定义了编译器、编译选项、目标文件输出路径和源码文件目录。通过使用wildcard函数和foreach函数,查找并生成了所有的源码文件和目标文件的文件路径。然后定义了目标文件的依赖关系,并编写了生成目标文件的规则。最后定义了clean规则用于清理目标文件。

要使用该Makefile文件,只需将其保存到源码文件所在的顶层目录,并执行make命令即可。执行完毕后,编译生成的目标文件将保存在output目录中。

需要注意的是,上述Makefile文件是一个示例,实际使用时需要根据具体的源码文件目录结构和编译需求进行适当的修改。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

5分33秒

JSP 在线学习系统myeclipse开发mysql数据库web结构java编程

领券