Makefiile의 예 binary라는 파일이 lib.o와 prog.o로 링크해서 생성한다 할때, binary: lib.o prog.o gcc -o binary -g -Wall lib.o prog.o lib.o: lib.c gcc -o lib.o -g -Wall -c lib.c prog.o: prog.c gcc -o prog.o -g -Wall -c prog.c clean: rm *.o binary binary라는 것이 여러번 사용되고 gcc -g -Wall이 여러번 사용될때, 매크로를 사용하면 된다. CFLAGS라는 매크로를 사용하면 여러번 -g -Wall을 쓰지 않아도 편하게 컴파일가능하다. %.o: %.c (%는 현재 디렉토리에 존재하는 어떠한 c파일 o파일이 될수가 있다.) 맨 아래 clean은 ..
makefile에 Rule을 나타낸 그림이다. ':'을 기준으로 왼쪽은 target, 오른쪽은 dependency를 나타낸다. Shell lines에서 시작은 Tab다. ☞ makefile에서 comment처리는 '#'을 사용한다. makefile에서 한 라인에 다 적기 힘들어서 continue 해야하는경우는 '\'를 사용한다. ☞ make -p 는 make에 관련된 rule들을 프린트 해준다. ☞ dependency라인에서 제일 마지막에 생성되어야 할 타겟을 제일 첫번째로 적어준다. (It is important that all dependencies be placed in a descending order in the file.) ☞ 동일한 dependency일 경우의 예 ( main.o this.o..
Motivation Small programs -> single file 모든 소스코드를 하나에 파일에 담을수 있다. 하지만 파일이 커지면 코드의 라인 수가 많아진다. 또, 하나에 파일 안에 점점 많은 모듈과 컴포넌트가 생기게 된다. 프로그램이 점점 커지게 되면, 여러 함수들 간에 호출관계를 파악하기 어렵다. 또 , 컴파일 되는데 소요되는 시간이 굉장히 오래 걸린다. 사소한 파일 수정역시 컴파일 과정을 겪어야 함으로 비효율 적이다. 그래서 컴포넌트들을 분할하는것이 필요하다. 여러개로 나누어서 관리하는것이다. 모듈들을 나누는것이 일반적으로 소프트웨어 개발에 필요한것 이다. 파일을 나눔으로써 변경된 파일만 컴파일 하면 되기 때문에 앞서말한 문제점 역시 해결된다. Mozilla Example 소스코드 트리이다..
Shared Libraries : linked to any program at run-time 동적라이브러리는 해당 라이브러리를 가지고 있지 않고 포인터 개념으로 라이브러리의 위치만을 가리켜 다른 파일들도 하나의 라이브러리를 공유해서 사용토록 할수있는 장점을 가지고 있다. Building a 'Shared Library' - Functions must be 'reentrant' (함수들이 반드시 전역변수를 갖고있어선 아니한다.) - This implies : No global variables (두 실행파일의 변수가 원치 않는 공유가 이루어 질수 있다.) - Code must be ' position - independent' - can't jump or call to fixed addresses - c..
라이브러리라고 하는것은 컴파일된 다양한 object 파일을 모아놓은 파일이다. 예를 들면 , 'pthread' 라이브러리는 thread의 관련된 기능들을 종합적으로 모아놓은 파일이다. 라이브러리는 크게 2가지로 나뉜다. Shared library(동적) , static library(정적) Static libraries: link at compile time source text -> compiler -> object file -> linker -> executable file How to build/ use an archive file - ar creates, updates, lists and extracts files from the library $ gcc -c func1.c $ gcc -c fun..
Major optons There are zillions of them, but there are some the most often used ones: - To compile : -c - Specify output filename: -o - Include debugging symbols: -g - GDB friendly output: -ggdb - Show all (most) warnings: -Wall - Be stubborn about standards: -ansi and -pedantic - Optimizations: -O, -O* Compiler path options -I dir : 해당 디렉토리에 있는 헤더파일을 찾아서 컴파일 할때 쓸수있다. -L dir : 라이브러리를 어디서 찾을지 지정해..
Bash 환경에서는 3가지의 반복문이 있다. 1) 'for' loop 사용방법 : for variable name in list do ... commands .. done 예시 : sum = 0 for i in 1 2 3 4 do sum=$(($sum+$i)) done echo "The sum of $i numbers is: $sum" 2) 'while' loop 사용방법 : while condition is true do ... commands ... done 예시 : echo "Enter the number" read no fact =1 i=1 while [ $i -le $no ] do fact = $(($fact * $i)) i=$(($i + 1)) done echo "The factorial of..