私は初心者です。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への未定義の参照を取得し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();
}
これは単なる関数宣言ファイルであるため、メインを含めることはできません。親切に案内してください。
答え:
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