在Makefile中,可以使用规则将.o文件放入单独的目录中。以下是一个简单的示例:
首先,创建一个名为src
的目录,并在其中创建一个名为main.c
的文件:
#include<stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
然后,创建一个名为obj
的目录,用于存放生成的.o文件。
接下来,创建一个名为Makefile
的文件,并在其中添加以下内容:
CC := gcc
CFLAGS := -Wall -Wextra -std=c99
LDFLAGS :=
SRCDIR := src
OBJDIR := obj
SOURCES := $(wildcard $(SRCDIR)/*.c)
OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
EXECUTABLE := main
.PHONY: all clean
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $^ -o $@
$(OBJDIR)/%.o: $(SRCDIR)/%.c
@mkdir -p $(OBJDIR)
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -rf $(OBJDIR)
rm -f $(EXECUTABLE)
在这个Makefile中,我们定义了以下变量:
CC
:C编译器的路径,这里使用的是gcc
。CFLAGS
:C编译器的选项,包括警告选项、C标准等。LDFLAGS
:链接器的选项,这里暂时为空。SRCDIR
:源代码所在的目录,这里为src
。OBJDIR
:生成的.o文件所在的目录,这里为obj
。SOURCES
:所有的源代码文件,使用wildcard
函数获取。OBJECTS
:所有的.o文件,使用subst
函数从源代码文件名转换为.o文件名。EXECUTABLE
:最终生成的可执行文件名,这里为main
。在Makefile中,我们定义了以下目标:
all
:默认目标,生成可执行文件。clean
:清理生成的文件。在$(EXECUTABLE)
目标中,我们使用链接器将所有的.o文件链接成可执行文件。
在$(OBJDIR)/%.o: $(SRCDIR)/%.c
规则中,我们使用C编译器将源代码文件编译为.o文件,并将其放入$(OBJDIR)
目录中。
现在,执行make
命令,将生成main
可执行文件,并将所有的.o文件放入obj
目录中。
推荐的腾讯云相关产品:
产品介绍链接地址:https://cloud.tencent.com/product
领取专属 10元无门槛券
手把手带您无忧上云