mirror of
https://github.com/ioacademy-jikim/debugging
synced 2026-08-11 16:32:58 +00:00
first commit
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
// my_source.c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <app.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
printf("%d\n", MAX);
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
#define MAX 100
|
||||
@@ -0,0 +1,8 @@
|
||||
# makefile1
|
||||
# 아래 코드를 먼저 보여 주고.
|
||||
# 문제점으로 app.h 안에있는 #define MAX 100이 변경될경우
|
||||
# 다시 컴파일 되지 않는다는 것을 이야기 할것.
|
||||
# 그리고 makefile2를 수업.
|
||||
|
||||
app: app.c
|
||||
cc -o app app.c -I .
|
||||
@@ -0,0 +1,5 @@
|
||||
# makefile2
|
||||
# make -f makefile2
|
||||
|
||||
app: app.c app.h
|
||||
cc -o app app.c -I .
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
// foo.c
|
||||
#include <stdio.h>
|
||||
#include <foo.h>
|
||||
|
||||
void foo()
|
||||
{
|
||||
printf("foo : %d\n", FOO);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// foo.h
|
||||
|
||||
#define FOO 100
|
||||
|
||||
void foo();
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
// goo.c
|
||||
#include <stdio.h>
|
||||
#include <goo.h>
|
||||
|
||||
void goo()
|
||||
{
|
||||
printf("goo : %d\n", GOO);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// goo.h
|
||||
|
||||
#define GOO 200
|
||||
|
||||
void goo();
|
||||
Binary file not shown.
@@ -0,0 +1,11 @@
|
||||
// main.c
|
||||
#include <stdio.h>
|
||||
#include <foo.h>
|
||||
#include <goo.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
goo();
|
||||
return 0;
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,17 @@
|
||||
# makefile
|
||||
|
||||
# 아래 처럼 만들면 foo.o 만 빌드되는 이유를 설명하고
|
||||
# makefile2로 수업.
|
||||
|
||||
foo.o : foo.c foo.h
|
||||
cc -c foo.c -I.
|
||||
|
||||
goo.o : goo.c goo.h
|
||||
cc -c goo.c -I.
|
||||
|
||||
main.o : main.c foo.h goo.h
|
||||
cc -c main.c -I.
|
||||
|
||||
app : main.o foo.o goo.o
|
||||
cc -o app main.o foo.o goo.o
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
# makefile2
|
||||
|
||||
app : main.o foo.o goo.o
|
||||
cc -o app main.o foo.o goo.o
|
||||
|
||||
main.o : main.c foo.h goo.h
|
||||
cc -c main.c -I.
|
||||
|
||||
foo.o : foo.c foo.h
|
||||
cc -c foo.c -I.
|
||||
|
||||
goo.o : goo.c goo.h
|
||||
cc -c goo.c -I.
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// foo.c
|
||||
#include <stdio.h>
|
||||
#include <foo.h>
|
||||
|
||||
void foo()
|
||||
{
|
||||
printf("foo : %d\n", FOO);
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// goo.c
|
||||
#include <stdio.h>
|
||||
#include <goo.h>
|
||||
|
||||
void goo()
|
||||
{
|
||||
printf("goo : %d\n", GOO);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// foo.h
|
||||
|
||||
#define FOO 100
|
||||
|
||||
void foo();
|
||||
@@ -0,0 +1,5 @@
|
||||
// goo.h
|
||||
|
||||
#define GOO 200
|
||||
|
||||
void goo();
|
||||
@@ -0,0 +1,11 @@
|
||||
// main.c
|
||||
#include <stdio.h>
|
||||
#include <foo.h>
|
||||
#include <goo.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
goo();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
# makefile1
|
||||
# 변수 도입
|
||||
|
||||
INCPATH=./include
|
||||
|
||||
app : main.o foo.o goo.o
|
||||
cc -o app main.o foo.o goo.o
|
||||
|
||||
main.o : main.c $(INCPATH)/foo.h $(INCPATH)/goo.h
|
||||
cc -c main.c -I$(INCPATH)
|
||||
|
||||
foo.o : foo.c $(INCPATH)/foo.h
|
||||
cc $(CFLAGS) -c foo.c -I$(INCPATH)
|
||||
|
||||
goo.o : goo.c $(INCPATH)/goo.h
|
||||
c $(CFLAGS) -c goo.c -I$(INCPATH)
|
||||
@@ -0,0 +1,21 @@
|
||||
# makefile2
|
||||
# 컴파일러와 옵션도 변수로 처리
|
||||
|
||||
INCPATH=./include
|
||||
CC=cc
|
||||
CFLAGS=-Wall -I$(INCPATH)
|
||||
|
||||
app : main.o foo.o goo.o
|
||||
$(CC) $(CFLAGS) -o app main.o foo.o goo.o
|
||||
|
||||
main.o : main.c $(INCPATH)/foo.h $(INCPATH)/goo.h
|
||||
$(CC) $(CFLAGS) -c main.c
|
||||
|
||||
foo.o : foo.c $(INCPATH)/foo.h
|
||||
$(CC) $(CFLAGS) -c foo.c
|
||||
|
||||
goo.o : goo.c $(INCPATH)/goo.h
|
||||
$(CC) $(CFLAGS) -c goo.c
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# makefile3
|
||||
# all 지시어에서 getobj app putobj가 추가된것을 설명
|
||||
|
||||
INCPATH=./include
|
||||
OBJPATH=./obj
|
||||
CC=cc
|
||||
CFLAGS=-Wall -I$(INCPATH)
|
||||
|
||||
all: getobj app putobj
|
||||
|
||||
app : main.o foo.o goo.o
|
||||
$(CC) $(CFLAGS) -o app main.o foo.o goo.o
|
||||
|
||||
main.o : main.c $(INCPATH)/foo.h $(INCPATH)/goo.h
|
||||
$(CC) $(CFLAGS) -c main.c
|
||||
|
||||
foo.o : foo.c $(INCPATH)/foo.h
|
||||
$(CC) $(CFLAGS) -c foo.c
|
||||
|
||||
goo.o : goo.c $(INCPATH)/goo.h
|
||||
$(CC) $(CFLAGS) -c goo.c
|
||||
|
||||
putobj:
|
||||
-mv *.o $(OBJPATH) 2>/dev/null
|
||||
|
||||
getobj:
|
||||
-mv $(OBJPATH)/*.o . 2>/dev/null
|
||||
@@ -0,0 +1,37 @@
|
||||
# makefile4
|
||||
# getobj putobj에서 쉘 스크립트를 추가한 내용 설명
|
||||
|
||||
INCPATH=./include
|
||||
OBJPATH=./obj
|
||||
CC=cc
|
||||
CFLAGS=-Wall -I$(INCPATH)
|
||||
|
||||
all: getobj app putobj
|
||||
|
||||
app : main.o foo.o goo.o
|
||||
$(CC) $(CFLAGS) -o app main.o foo.o goo.o
|
||||
|
||||
main.o : main.c $(INCPATH)/foo.h $(INCPATH)/goo.h
|
||||
$(CC) $(CFLAGS) -c main.c
|
||||
|
||||
foo.o : foo.c $(INCPATH)/foo.h
|
||||
$(CC) $(CFLAGS) -c foo.c
|
||||
|
||||
goo.o : goo.c $(INCPATH)/goo.h
|
||||
$(CC) $(CFLAGS) -c goo.c
|
||||
|
||||
putobj:
|
||||
if [ ! -d $(OBJPATH) ]; then \
|
||||
mkdir $(OBJPATH); \
|
||||
fi
|
||||
-mv *.o $(OBJPATH) 2>/dev/null
|
||||
|
||||
getobj:
|
||||
@if [ ! -d $(OBJPATH) ]; then \
|
||||
mkdir $(OBJPATH); \
|
||||
fi
|
||||
-mv $(OBJPATH)/*.o . 2>/dev/null
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
# makefile5
|
||||
# install 추가된것.
|
||||
# install은 자동으로 실행되지 않으므로
|
||||
# make install 이 필요하다는것을 설명
|
||||
|
||||
INSTPATH=./bin
|
||||
INCPATH=./include
|
||||
OBJPATH=./obj
|
||||
CC=cc
|
||||
CFLAGS=-Wall -I$(INCPATH)
|
||||
|
||||
COND1=`stat app 2>/dev/null | grep Modify`
|
||||
COND2=`stat $(INSTPATH) 2>/dev/null | grep Modify`
|
||||
|
||||
|
||||
|
||||
all: getobj app putobj
|
||||
|
||||
app : main.o foo.o goo.o
|
||||
$(CC) $(CFLAGS) -o app main.o foo.o goo.o
|
||||
|
||||
main.o : main.c $(INCPATH)/foo.h $(INCPATH)/goo.h
|
||||
$(CC) $(CFLAGS) -c main.c
|
||||
|
||||
foo.o : foo.c $(INCPATH)/foo.h
|
||||
$(CC) $(CFLAGS) -c foo.c
|
||||
|
||||
goo.o : goo.c $(INCPATH)/goo.h
|
||||
$(CC) $(CFLAGS) -c goo.c
|
||||
|
||||
putobj:
|
||||
@if [ ! -d $(OBJPATH) ]; then \
|
||||
mkdir $(OBJPATH); \
|
||||
fi
|
||||
@-mv *.o $(OBJPATH) 2>/dev/null
|
||||
|
||||
getobj:
|
||||
@if [ ! -d $(OBJPATH) ]; then \
|
||||
mkdir $(OBJPATH); \
|
||||
fi
|
||||
@-mv $(OBJPATH)/*.o . 2>/dev/null
|
||||
|
||||
|
||||
install:
|
||||
@if [ ! -d $(INSTPATH) ]; then \
|
||||
mkdir $(INSTPATH); \
|
||||
fi
|
||||
|
||||
@if [ "$(COND1)" != "$(COND2)" ];\
|
||||
then\
|
||||
cp -p ./app $(INSTPATH)/app 2>/dev/null;\
|
||||
chmod 700 $(INSTPATH)/app ;\
|
||||
echo "Installed in" $(INSTPATH)/app;\
|
||||
fi
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
# makefile6
|
||||
|
||||
# make cleanall Ãß°¡
|
||||
|
||||
INSTPATH=./bin
|
||||
INCPATH=./include
|
||||
OBJPATH=./obj
|
||||
CC=cc
|
||||
CFLAGS=-Wall -I$(INCPATH)
|
||||
|
||||
COND1=`stat app 2>/dev/null | grep Modify`
|
||||
COND2=`stat $(INSTPATH) 2>/dev/null | grep Modify`
|
||||
|
||||
|
||||
|
||||
all: getobj app putobj
|
||||
|
||||
app : main.o foo.o goo.o
|
||||
$(CC) $(CFLAGS) -o app main.o foo.o goo.o
|
||||
|
||||
main.o : main.c $(INCPATH)/foo.h $(INCPATH)/goo.h
|
||||
$(CC) $(CFLAGS) -c main.c
|
||||
|
||||
foo.o : foo.c $(INCPATH)/foo.h
|
||||
$(CC) $(CFLAGS) -c foo.c
|
||||
|
||||
goo.o : goo.c $(INCPATH)/goo.h
|
||||
$(CC) $(CFLAGS) -c goo.c
|
||||
|
||||
putobj:
|
||||
@if [ ! -d $(OBJPATH) ]; then \
|
||||
mkdir $(OBJPATH); \
|
||||
fi
|
||||
@-mv *.o $(OBJPATH) 2>/dev/null
|
||||
|
||||
getobj:
|
||||
@if [ ! -d $(OBJPATH) ]; then \
|
||||
mkdir $(OBJPATH); \
|
||||
fi
|
||||
@-mv $(OBJPATH)/*.o . 2>/dev/null
|
||||
|
||||
|
||||
install:
|
||||
@if [ ! -d $(INSTPATH) ]; then \
|
||||
mkdir $(INSTPATH); \
|
||||
fi
|
||||
|
||||
@if [ "$(COND1)" != "$(COND2)" ];\
|
||||
then\
|
||||
cp -p ./app $(INSTPATH)/app 2>/dev/null;\
|
||||
chmod 700 $(INSTPATH)/app ;\
|
||||
echo "Installed in" $(INSTPATH)/app;\
|
||||
fi
|
||||
|
||||
cleanall:
|
||||
@-rm app
|
||||
@-rm -r $(OBJPATH)
|
||||
@-rm -r $(INSTPATH)
|
||||
@ echo cleanall!
|
||||
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
sflsjflsjf s
|
||||
sdlkfjslkfjs
|
||||
'f
|
||||
@@ -0,0 +1,8 @@
|
||||
// foo.c
|
||||
#include <stdio.h>
|
||||
#include <foo.h>
|
||||
|
||||
void foo()
|
||||
{
|
||||
printf("foo : %d\n", FOO);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// foo.h
|
||||
|
||||
#define FOO 100
|
||||
|
||||
void foo();
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
// goo.c
|
||||
#include <stdio.h>
|
||||
#include <goo.h>
|
||||
|
||||
void goo()
|
||||
{
|
||||
printf("goo : %d\n", GOO);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// goo.h
|
||||
|
||||
#define GOO 200
|
||||
|
||||
void goo();
|
||||
Binary file not shown.
@@ -0,0 +1,11 @@
|
||||
// main.c
|
||||
#include <stdio.h>
|
||||
#include <foo.h>
|
||||
#include <goo.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
goo();
|
||||
return 0;
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,11 @@
|
||||
# makefile 1
|
||||
|
||||
# make 로 실행하면 아무것도 안됨을 설명
|
||||
# make foo 로 실행할것
|
||||
|
||||
# for each xxxxx.o target there must be a xxxxx.c dependency to build.
|
||||
|
||||
.c.o:
|
||||
cc -c $< -I.
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# makefile2
|
||||
|
||||
# .c.o 뿐 아니라 모든 파일 확장자가 가능함을 설명
|
||||
|
||||
#.SUFFIXES: .txt .log
|
||||
|
||||
.txt.log:
|
||||
@echo "Converting " $< " to " $*.log
|
||||
mv $< $*.log
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
# makefile3
|
||||
|
||||
# 아래 코드를 사용해 보고
|
||||
# 문제점은 각 헤더에 dependecy 임을 이야기 하고
|
||||
# makefile4를 수업.
|
||||
|
||||
.c.o:
|
||||
@echo "Compiling" $< "..."
|
||||
cc -c $< -I.
|
||||
|
||||
app: main.o foo.o goo.o
|
||||
@echo "Building target" $@ "..."
|
||||
cc -o app main.o foo.o goo.o
|
||||
|
||||
#problem dependency
|
||||
@@ -0,0 +1,13 @@
|
||||
# makefile4
|
||||
|
||||
.c.o:
|
||||
@echo "Compiling" $< "..."
|
||||
cc -c $< -I.
|
||||
|
||||
app: main.o foo.o goo.o
|
||||
@echo "Building target" $@ "..."
|
||||
cc -o app main.o foo.o goo.o
|
||||
|
||||
main.o:foo.h goo.h
|
||||
foo.o:foo.h
|
||||
foo.o:goo.h
|
||||
@@ -0,0 +1,8 @@
|
||||
// foo.c
|
||||
#include <stdio.h>
|
||||
#include <mylib.h>
|
||||
|
||||
void foo()
|
||||
{
|
||||
printf("foo\n");
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
// goo.c
|
||||
#include <stdio.h>
|
||||
#include <mylib.h>
|
||||
|
||||
void goo()
|
||||
{
|
||||
printf("goo\n");
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,16 @@
|
||||
TLIB=mylib.a
|
||||
OBJS=foo.o goo.o
|
||||
CC=cc
|
||||
INCPATH=.
|
||||
CFLAGS=-Wall -I$(INCPATH)
|
||||
|
||||
.c.o:
|
||||
$(CC) $(CFLAGS) -c $<
|
||||
|
||||
$(TLIB): $(OBJS)
|
||||
ar cr $(TLIB) $(OBJS)
|
||||
|
||||
$(OBJS): $(INCPATH)/mylib.h
|
||||
|
||||
cleanall:
|
||||
-rm -f *.o *.a
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
// mylib.h
|
||||
|
||||
void foo();
|
||||
void goo();
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,10 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <mylib.h>
|
||||
|
||||
int main (int arg, char *argv[])
|
||||
{
|
||||
foo();
|
||||
goo();
|
||||
return 0;
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,16 @@
|
||||
OBJS=main.o
|
||||
CC=cc
|
||||
INCLIB=../MYLIB
|
||||
LIBS=$(INCLIB)/mylib.a
|
||||
CFLAGS=-Wall -I. -I$(INCLIB)
|
||||
|
||||
.c.o:
|
||||
$(CC) $(CFLAGS) -c $<
|
||||
|
||||
app: $(OBJS) $(LIBS)
|
||||
$(CC) $(CFLAGS) -o app $(OBJS) $(LIBS)
|
||||
|
||||
$(OBJS): $(INCLIB)/mylib.h
|
||||
|
||||
cleanall:
|
||||
-rm -f *.o app
|
||||
@@ -0,0 +1,29 @@
|
||||
# MYLIB 안에 makefile을 수행하고 application 안에 makefile 수행..
|
||||
|
||||
COND1=`stat app 2>/dev/null | grep Modify`
|
||||
COND2=`stat ./application/app 2>/dev/null | grep Modify`
|
||||
|
||||
all: buildall getexec
|
||||
|
||||
buildall:
|
||||
@echo "****** Invoking MYLIB/makefile"
|
||||
(cd MYLIB; $(MAKE))
|
||||
@echo "****** Invoking application/makefile"
|
||||
(cd application; $(MAKE))
|
||||
|
||||
getexec:
|
||||
@if [ "$(COND1)" != "$(COND2)" ];\
|
||||
then\
|
||||
echo "Getting new app!";\
|
||||
cp -p ./application/app . 2>/dev/null;\
|
||||
chmod 700 app;\
|
||||
else\
|
||||
echo "Nothing done!";\
|
||||
fi
|
||||
|
||||
cleanall:
|
||||
-rm -f app
|
||||
@echo "****** Invoking MYLIB/makefile"
|
||||
@(cd MYLIB; $(MAKE) cleanall)
|
||||
@echo "****** Invoking appl/makefile"
|
||||
@(cd application; $(MAKE) cleanall)
|
||||
Reference in New Issue
Block a user