我遇到了makefile的基础知识。
我使用gcc编译
我需要做的是创建一个名为labMakefile的makefile,目标是
lab
labM.o
labG.o
clean
我正在处理的文件夹中的文件包含
labM.c
labM.o
labG.c
labG.o
我一直在看makefile教程,但我似乎无法找到创建makefile的正确方法
我尝试了什么
labMakefile: labM.o labG.o
但它只是说labMakefile:: command not found
答案 0 :(得分:6)
makefile是由Make运行的脚本。它只是一个用严格语法编写的文本文件,它需要像源代码一样(虽然它被解释,但没有编译)。您可以使用任何您喜欢的文本编辑器来创建它。
您正在使用C(根据文件名的后缀判断)。因此,要从labM.o
创建labM.c
,您可能会使用类似
gcc -c labM.c -o labM.o
(并非真的需要-o labM.o
,这是默认行为,我只是想稍微解释一下。)同样建立labG.o
你会使用
gcc -c labG.c -o labG.o
然后(我猜)你将它们链接在一起构建实验室:
gcc labM.o labG.o -o lab
有时你想清除构造的文件:
rm -f *.o lab
所以要做到这一切,你要编写一个名为Makefile
的makefile,看起来像这样(注意前导空格是TAB):
labM.o:
gcc -c labM.c -o labM.o
labG.o:
gcc -c labG.c -o labG.o
lab:
gcc labM.o labG.o -o lab
.PHONY:clean
clean:
rm -f *.o lab
然后你可以make lab
或make clean
或make labM.o labG.o
。如果你真的想要调用这个makefile labMakefile
,你可以这样做,但是你必须这样做,例如make -f labMakefile lab
。 这个makefile粗糙但有效。可以大大改进:
CC = gcc
lab: labM.o labG.o
gcc $^ -o $@
lab%.o: lab%.c
$(CC) -c $< -o $@
.PHONY:clean
clean:
@echo cleaning things up, boss...
@rm -f *.o lab
这将更好地处理依赖关系:如果您修改labM.c
但不修改labG.c
,然后make
,则Make会知道labM.o
(和lab
)必须重建,但labG.o
不必重建。
这需要很多东西,并且可以进一步改进(依赖性处理可以非常光滑),但这是一个良好的开端。
答案 1 :(得分:2)
要运行makefile,必须调用“make”
如果你的makefile没有标准名称(makefile或Makefile),你应该用-f参数指定它:
make -f labMakefile