我是初学者。我想为 Linux 中的 C 程序创建一个 makefile。
我的程序流程是,
在(但未在其中定义)中声明的cmd.c
调用cdirec(), dspecd(), sfile(), hfile()
mainl.h
cdirec(), dspecd(), sfile() and hfile()
cdirec.c, dspecd.c, sfile.c
分别在和中定义hfile.c
。
cdirec()
依次调用mimx(), skloc(), fnc() and fcmp()
其中声明的subl.h
(但未在其中定义的)
mimx(), skloc(), fnc() and fcmp()
分别定义在mimx.c, skloc.c, fnc.c and fcmp.c
。
我尝试如下创建一个makefile,
all: cmd.o cdir.o dspecd.o sfile.o hfile.o
cc cmd.o cdir.o dspecd.o sfile.o hfile.o -o sourceinfo
cmd.o: cmd.c mainl.h
cc -c cmd.c
cdir.o: cdirec.o mimx.o skloc.o fnc.o fcmp.o
cc cdirec.o mimx.o skloc.o fnc.o fcmp.o -o cdir.o
cdirec.o: cdirec.c mainl.h subl.h
cc -c cdirec.c
dspecd.o: dspecd.c mainl.h
cc -c dspecd.c
sfile.o: sfile.c mainl.h
cc -c sfile.c
hfile.o: hfile.c mainl.h
cc -c hfile.c
mimx.o: mimx.c subl.h
cc -c mimx.c
skloc.o: skloc.c subl.h
cc -c skloc.c
fnc.o: fnc.c subl.h
cc -c fnc.c
fcmp.o: fcmp.c subl.h
cc -c fcmp.c
我不明白问题是什么。但是我得到一个未定义的对 main in 的引用cdir.o
。cdirec.c 看起来像这样,
#include<stdio.h>
#include "subl.h"
void cdirec()
{
printf("\nAll details of current directory is printed.\n");
mimx();
skloc();
fnc();
fcmp();
}
我没有也不能有 main,因为它只是一个函数声明文件。请指导我。
回答:
all: cmd.o cdirec.o dspecd.o sfile.o hfile.o mimx.o skloc.o fnc.o fcmp.o
cc cmd.o cdirec.o dspecd.o sfile.o hfile.o mimx.o skloc.o fnc.o fcmp.o -o sourceinfo
cmd.o: cmd.c mainl.h
cc -c cmd.c
cdirec.o: cdirec.c mainl.h subl.h
cc -c cdirec.c
dspecd.o: dspecd.c mainl.h
cc -c dspecd.c
sfile.o: sfile.c mainl.h
cc -c sfile.c
hfile.o: hfile.c mainl.h
cc -c hfile.c
mimx.o: mimx.c subl.h
cc -c mimx.c
skloc.o: skloc.c subl.h
cc -c skloc.c
fnc.o: fnc.c subl.h
cc -c fnc.c
fcmp.o: fcmp.c subl.h
cc -c fcmp.c
clean:
rm -rf *.o sourceinfo