
|
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
다수의 소스 파일로 구성된 큰프로그램중 어떤파일이 변경되어 재 컴파일이 필요한지
판단해서 프로그램 재구성작업을 효율적을 수행하는 역할을 한다.
make는 수정된것을 안다 수정시간등으로 그래서 수정된 파일만 컴파일을 해준다.
예를 들어서 a.0의 수정시간보다 a.c 의 수정시간이 최신이면 다시 컴파일을 해준다.
make파일의 기본적인 형태
먼저 타겟을 적는다 예를 들어서 컴파일을 해서 Test라는 실행 파일을만들고 싶으면
Test 가 make에들어간다.
예) make test a.c b.c c.c
여기 한줄아래 대상파일을 실행하기 위한 명령을 아래적는다
위에 공백은 탭키로 해야지만 위에 줄이 명령이라고 인식한다.
예)
test:: test.c
gcc test.c -o test
clean: => make clean이라는 명령을 주었을때 이것이 실행이된다. 쉽게 말해서 라벨을 찾아서 실행명령을 수행한다.
rm test.o
======================
의존성
대상과 대상을 생성하는데 필요한 소스 파일의 관계
매크로 치환
OBJF=test1.o test2.o test3.o
SRCS=$(OBJF:.o=. c)
-----------------------------------------------------------------------------------------------------------------------
암시적인 규칙을이용한다.
01 OBJF = test1.o test2.o test3.o
02 test: $(OBJF)
03 ??gcc -o $@ $(OBJF)
04 clean:
05 ??rm $(OBJF)
1.ar r mylib.a *.o 오브젝트 파일을 하나로 묶는다
ls해보면 mylib이라는 파일이 생겨버렸다.
.a파일을 만들어서 정적라이브러리로 만들어서 쓸수 있다.
1
2
3
4
5
6
7
------------------------------------------------------------------------------------------------
정적 라이브러리
장점
컴파일 하는 경우 속도가 빠름
단점
사이즈가 큼
동적 라이브러리
장점
사이즈가 작음
단점
컴파일 하는 경우 속도가 느림
바이너리를 배포할 때 컴파일 할 당시에 사용한 공유 라이브러리와 같은 메이저 버전을 가지고 공유 라이브러리가 있는 시스템에서만 동작 함
---------------------------------------------------------------------------------------------------------------
공유 라이브러리의 추가 장점
라이브러리 변경 시 정적 라이브러리는 컴파일한 모든 파일들을 바꾸어야 하지만 공유 라이브러리는 공유 라이브러리만 바꾸어 주면 된다.
이유 : 공유 라이브러리는 실행 시 공유 라이브러리와 링크 되기 때문
---------------------------------------------------------------------------------------------------------------
오브젝트 만들기
gcc -fPIC -c plus.c minus.c
-fPIC : cc1 컴파일러에게 위치(메모리)에 관계 없이 수행되는 코드로 컴파일 하라는 옵션
파일이 어떻게 돌아갈지 모르기때문에
---------------------------------------------------------------------------------------------------------------
라이브러리 만들기 (인덱스 과정 불필요)
gcc -shared -Wl,-soname,libmy.so.0 -o libmy.so.0.0.0 plus.o minus.o
-shared : shared object를 생성하라는 옵션
-Wl: -Wl옵션 뒤에 오는 옵션 들을 링커에게 바로 전달하라는 옵션
-soname,libmy.so.0 : 동적 링커에게 soname libmy.so.0와 같은 형식으로 바로 전달
---------------------------------------------------------------------------------------------------------------
라이브러리를 만든 후 libmystuff.so.0.0.0의 심볼릭 링크를 만들기
ln -s libmy.so.0.0.0 libmy.so.0
--> 동적 링크를 위한 파일
ln -s libmy.so.0.0.0 libmy.so
--> gcc 링크를 위한 파일
---------------------------------------------------------------------------------------------------------------
동적 링커(/lib/ld-linux.so.2)가 찾을 수 있도록 디렉토리 설정하기
/etc/ld.so.conf 파일을 열어 libmy.so.0.0.0 파일이 있는 디렉토리를 추가한다.
/etc/ld.so.conf에 지정된 디렉토리를 찾아 다니면서 새로운 심볼릭 링크를 만들고 동적 링커가 읽어 들이는 /etc/ld.so.cache 파일을 새로 갱신한다.
ldconfig
/usr/lib 디렉토리에 만든 라이브러리를 복사하면 위의 절차는 필요가 없다.
---------------------------------------------------------------------------------------------------------------
만든 라이브러리 사용하기 (.a와 .so가 둘 다 있으면 .so를 선택)
gcc -o 16_9 16_9.c -lmy -L.
sokoban's Blog is powered by Daum & Tattertools