C C++/IDS 개발 - C
IDS 프로젝트 - MAKEFILE 작성하기
투영
2024. 4. 22. 09:02
명령어로 이렇게 한 줄 계속 치면서 실행하니까 손 아파서 메이크파일을 만들었다.
gcc IDS.c queue.c readpacket.c detectpacket.c logpacket.c -o IDS.out -g -lpthread -lpcap -lnsl -D_BSD_SOURCE -lsqlite3
조건
- 컴파일러(CC): gcc
- 컴파일러옵션(CFLAGS): -g -O2 -Wall -D_BSD_SOURCE
- -g: 디버그 정보를 포함하도록 컴파일한다. 프로그램 실행 시 디버깅이 용이하게 됨
- -O2: 최적화 수준, 숫자가 높을수록 더 많은 최적화가 수행되는데 컴파일 시간이 오래걸릴 수 있음
- -Wall: 모든 경고 메세지를 출력한다. (잠재적 오류 해결 가능)
- -D_BSD_SOURCE: 프로그램을 BSD 환경에서 컴파일 할 때 필요한 메크로 정의
- 라이브러리(LIBS)
- - lpthread: 멀티스레드 환경에서 필요한 라이브러리
- - lpcap: 네트워크 패킷을 캡처하고 분석하는데 사용되는 라이브러리
- - lnsl: 소켓 통신 및 네트워크 프로토콜 구현에 사용됨
- - lsqlite3: sqlite3 라이브러리
- 프로세스 실행 순서: preprocess 이후 $(TARGET)
Makefile
위에서 말한 것들을 다 아래에 넣으면 이렇게 된다
.PHONY: all clean preprocess
CC = gcc
CFLAGS = -g -O2 -Wall -D_BSD_SOURCE
LIBS = -lpthread -lpcap -lnsl -lsqlite3
TARGET = IDS.out
SRCS = IDS.c queue.c readpacket.c detectpacket.c logpacket.c
OBJS = $(SRCS:.c=.o)
all: preprocess $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
preprocess:
./check_and_move.sh
clean:
rm -f $(OBJS) $(TARGET)
사실 아직도 저 .PHONY가 이해가 안 간다
- preprocess는 프로그램 실행 전에 먼저 실행되어야 할 파일이다 (하단에 코드 있음)
- $(TARGET): $(OBJS) 제일 위에 있는 한 줄 짜리 명령어를 기호로 치환한 것과 같다
-> gcc [컴파일러 옵션] -o [아웃파일] [의존파일] [라이브러리]
-> $(CC) $(CFLAGS) -o $@ $^ $(LIBS) //여기서 $^는 모든 의존 파일 목록을 의미, 링킹할 오브젝트 파일을 의미한다
- clean: 오브젝트 파일과 타겟파일 (.out)을 없앤다
이게 preprocess 에 있는 쉘 스크립트 -> processed_packets 에서 packets로 파일을 옮긴다
#!/bin/bash
if [ "$(ls -A ./processed_packets)" ]; then
mv ./processed_packets/* packets
fi
실행 방법
make //makefile 실행 (타겟파일 생성)
make clean //옵젝파일 + 아웃파일 삭제