Makefile 빌드 변수 CFLAGS와 LDFLAGS 활용법

개요Makefile에서 CFLAGS와 LDFLAGS는 각각 컴파일 단계와 링크 단계에 필요한 옵션을 전달하는 관례적인 변수입니다. 이 두 변수를 적절히 활용하면 빌드 과정을 체계적으로 제어할 수 있습니다. CFLAGS 상세CFLAGS(Compiler Flags)는 소스 파일(.c)을 목적 파일(.o)로 변환하는 컴파일 단계에서 사용되는 옵션들을 담당합니다. 주요 옵션옵션설명-I<경로>헤더 파 ...

7월 4일 16:42에 게시됨

리눅스와 VSCode를 이용한 C++ 프로젝트 개발 환경 구축 및 CMake 활용

C/C++ 컴파일 과정 C++ 소스 코드가 실행 가능한 프로그램으로 변환되는 과정은 여러 단계로 나뉩니다. 각 단계는 특정 역할을 수행하며, 이해하는 것이 빌드 시스템을 다루는 데 중요합니다. 1. 전처리 (Pre-compilation) 전처리기는 소스 파일(.cpp)과 헤더 파일(.h)을 처리하여 전처리된 파일(.i)을 생성합니다. 이 과정에서 #include, #define과 같은 전처리 지시어를 ...

7월 3일 17:03에 게시됨

Linux에서의 Windows 크로스 컴파일: MinGW32/MinGW64 도구 체인 활용 가이드

크로스 컴파일의 필요성과 MinGW 개념 MinGW(Minimalist GNU for Windows)는 리눅스 환경에서 윈도우 실행 파일(.exe, .dll)을 생성할 수 있도록 지원하는 완전한 개발 툴체인입니다. 이 도구를 사용하면: 윈도우용 애플리케이션을 리눅스에서 직접 빌드할 수 있음 OS 전환 없이 통합된 개발 환경 유지 가능 리눅스의 강력한 툴링과 패키지 시스템 활용 Cygwin과 ...

6월 13일 19:23에 게시됨

GCC 정적 타입 트리 구조 개선 및 최적화 전략

1. 기존 동적 트리 구조의 한계 분석 컴파일러 내부에서 추상 구문 트리(AST)는 소스 코드 분석과 목적 코드 생성을 연결하는 핵심 자료구조입니다. GNU 컴파일러 컬렉션(GCC)은 오랜 시간에 걸쳐 발전해왔지만, 현재 사용되는 동적 타입 기반의 노드 구조는 성능 저하와 유지보수 복잡도 증가라는 문제를 안고 있습니다. 1.1 유니온 기반 노드 구조의 문제점 기존 tree_no ...

6월 5일 00:31에 게시됨

정적 라이브러리와 동적 라이브러리

정적 라이브러리 정적 라이브러리(.a): 프로그램이 컴파일 및 링크 단계에서 라이브러리 코드를 실행 파일에 복사합니다. 프로그램 실행 시 더 이상 정적 라이브러리가 필요하지 않습니다. 정적 라이브러리 이름은 일반적으로 libXXX.a 형식을 가지며, 유효 이름은 접두사 lib와 접미사 .a를 제거한 XXX입니다. 링크 단계에서는 해당 바이너리 파일을 연결하므로, 소스 ...

5월 30일 17:41에 게시됨

gprof 프로파일러 활용 가이드

gprof 성능 분석 도구 1. 개요 gprof는 프로파일링 결과를 분석하는 도구입니다. 이 도구는 복합적인 방식으로 프로그램의 실행 정보를 수집합니다. 첫째, 계측(instrumentation) 기법을 사용하여 컴파일 시점에 함수 시작 지점에 카운터를 삽입함으로써 각 함수의 호출 빈도와 호출 횟수를 기록합니다. 둘째, 샘플링(sampling) 기법을 활용하여 프로그램 실행 중 일정한 ...

5월 27일 23:57에 게시됨

STM32 범용 프로젝트 템플릿 생성하기

범용 링커 스크립트 링커 스크립트는 프로그램 진입점인 Reset_Handler 함수의 위치를 정의하고, 메모리 영역 배치를 설정하며, 표준 라이브러리 관련 정보를 제거하는 역할을 합니다. ST 사에서는 표준 주변장치 라이브러리에 다양한 모델에 대응하는 링커 스크립트를 제공하지 않았으며, HAL 라이브러리에서만 일부 예시를 찾을 수 있습니다: STM32F100XB_FLASH.ld STM3 ...

5월 25일 17:34에 게시됨