我正在一个有两个海关标头的学校项目中,每个标头都有一个.c文件和.h文件。我喜欢使用VSCode,所以我将代码复制到MSWord中以备将来使用。但是,运行带有许多头文件的程序变得非常困难:
gcc -o main.c header1.c header2.c main
我最近了解到Makefile
,但是找不到创建它的任何方法。我曾尝试阅读一些网站,但感到很困惑。甚至不确定它是否可以在VSCode上运行,还是需要其他扩展名。
您可以将其命名为SOURCES
,然后将所有源文件分配给该变量。对于目标文件也是如此。
$@
:指向目标名称。
$<
:指第一个先决条件。
$^
:指所有先决条件。
因此,当您执行此操作时
make main
会发生什么,规则转换为:gcc main.o header1.o header2.o -o main
,但是请注意,没有生成目标文件。
这里Makefile
将根据我们定义的规则生成目标文件这意味着无论先决条件名称是什么,都将生成目标文件,但其扩展名必须为.o
。
%.o: %.c
$(CC) -c $< -o $@
Makefile
#compiler name
cc :=gcc
#remove command
RM := rm -rf
#source files
SOURCES :=main.c header1.c header2.c
#object files
OBJS :=$(SOURCES:.c=.o)
#main target
main: $(OBJS)
$(CC) $^ -o $@
%.o: %.c
$(CC) -c $< -o $@
.PHONY: clean
clean:
$(RM) *.o main
您可以这样使用它:
main: main.o header1.o header2.o
gcc -o main main.o header1.o header2.o
%.o: %.c
gcc -c $<
这里是制作文件的好教程:http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/
您可以运行makedepend
生成头文件的依赖关系。顺便说一句:正确的gcc命令是gcc -o main header1.c header2.c main.c