회사 소개¶
제품정보¶
사이트맵 Makefiles라는 읽는 파일에서 실행 가능한 프로그램 및 라이브러리를 자동으로 빌드하는 빌드 자동화 도구입니다. 대상 프로그램을 실행하는 방법을 지정하는 Makefiles라는 읽는 파일입니다.
기본 개념¶
Makefile 구조¶
카지노사이트
제품 정보¶
카지노사이트
기본 Makefile¶
간단한 예제¶
카지노사이트
변수¶
카지노사이트
변수¶
가변 정의¶
카지노사이트
내장 변수¶
# Automatic variables
$@ # Target name
# Make Cheatsheet
## Overview
GNU Make is a build automation tool that automatically builds executable programs and libraries from source code by reading files called Makefiles which specify how to derive the target program.
## Basic Concepts
### Makefile Structure
```makefile의 경우
표적: 의존
이름 *
이름 *
카지노사이트
Target # 파일을 생성하거나 수행 할 작업
Dependency # 대상에 따라 달라지는 파일
레시피 # 대상을 만들려면 명령
규칙 # 목표 + 종속 + 조리법
변수 # 재사용 할 수있는 값
Basic Makefile¶
Simple Example¶
```makefile의 경우
간단한 C 프로그램 구축¶
프로그램: main.o utils.o gcc -o 프로그램 main.o 유틸리티. ·
main.o: 주요.c gcc -c 주요. ·
utils.o : utils.c gcc -c 유틸리티. ·
청소: rm -f *.o 프로그램
### With Variables
```makefile의 경우
CC = 기가 바이트
CFLAGS = -벽 -g
OBJECTS = 메인.o utils.o
TARGET = 프로그램
$ (TARGET) : $ (OBJECTS)
$(CC) -o $(TARGET) $(OBJECTS)
main.o: 주요.c
$(CC) $(CFLAGS) -c 메인. ·
utils.o : utils.c
$(CC) $(CFLAGS) -c 유틸리티. ·
청소:
rm -f $ (OBJECTS) $ (TARGET)
· PHONY: 깨끗한
Variables¶
Variable Definition¶
```makefile의 경우
간단한 할당¶
CC = 기가 바이트 CFLAGS = -벽 -g
Recursive 할당 (사용할 때 증발)¶
SOURCES = $ (wildcard *.c)
간단한 할당 ( 즉시 평가)¶
OBJECTS :=$(SOURCES:.c=.o)
상태 할당 (이렇게 정의되지 않는 경우에만)¶
CC ?= 사이트맵
변수에 대해서¶
CFLAGS += -O2 ο 회원 관리
환경 변수¶
카지노사이트
패턴 규칙¶
기본 패턴¶
카지노사이트
고급 패턴¶
카지노사이트
제품정보¶
문자열 기능¶
카지노사이트
파일 기능¶
카지노사이트
상태 기능¶
카지노사이트
조건 선언문¶
ifeq/ifneq의 경우¶
카지노사이트
ifdef/ifndef의 경우¶
카지노사이트
상태 할당¶
오프화이트
고급 기능¶
파일 포함¶
카지노사이트
출력 전력¶
오프화이트
자주 묻는 질문¶
카지노사이트
Phony 대상¶
일반적인 Phony 표적¶
카지노사이트
Multi-Target 빌드¶
여러 프로그램¶
카지노사이트
도서관 빌딩¶
카지노사이트
명령 선 사용법¶
기본 명령¶
카지노사이트
관련 링크¶
카지노사이트
복잡한 예제¶
사이트맵 회사연혁¶
```makefile CXX = g++ CXXFLAGS = -std=c++17 -Wall -Wextra -g LDFLAGS = -lpthread
SRCDIR = src OBJDIR = obj SOURCES = $(wildcard \((SRCDIR)/*.cpp) OBJECTS = \((SOURCES:\)(SRCDIR)/%.cpp=\)(OBJDIR)/%.o) TARGET = myprogram
.PHONY: all clean
all: $(TARGET)
$(TARGET): $(OBJECTS) $(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
$(OBJDIR)/%.o: \((SRCDIR)/%.cpp|\)(OBJDIR) $(CXX) $(CXXFLAGS) -c $< -o $@
$(OBJDIR): mkdir -p $(OBJDIR)
clean: rm -rf $(OBJDIR) $(TARGET)
Dependency generation¶
-include $(OBJECTS:.o=.d)
$(OBJDIR)/%.d: \((SRCDIR)/%.cpp|\)(OBJDIR) $(CXX) -MM -MT $(@:.d=.o) $< >`` $@ ```의 경우
Multi-Directory 프로젝트¶
```makefile
Project structure¶
PROJECT_ROOT = . SRC_DIRS = src src/utils src/network INC_DIRS = include OBJ_DIR = build BIN_DIR = bin
Find all source files¶
SOURCES = \((foreach dir,\)(SRC_DIRS),$(wildcard $(dir)/*.c)) OBJECTS = \((SOURCES:%.c=\)(OBJ_DIR)/%.o) TARGET = $(BIN_DIR)/myapp
Compiler settings¶
CC = gcc CFLAGS = -Wall -g \((addprefix -I,\)(INC_DIRS)) LDFLAGS = -lm
.PHONY: all clean dirs
all: dirs $(TARGET)
dirs: @mkdir -p \((OBJ_DIR) ((BIN_DIR) @mkdir -p \((foreach dir,\)(SRC_DIRS),\)(OBJ_DIR)/\)(dir))
$(TARGET): $(OBJECTS) $(CC) $^ -o $@ $(LDFLAGS)
$(OBJ_DIR)/%.o: %.c $(CC) $(CFLAGS) -c $< -o $@
clean: rm -rf $(OBJ_DIR) $(BIN_DIR) ```에 대하여
최고의 연습¶
회사소개¶
```makefile
Variables at the top¶
CC = gcc CFLAGS = -Wall -g TARGET = myprogram
Default target first¶
all: $(TARGET)
Pattern rules¶
%.o: %.c $(CC) $(CFLAGS) -c $< -o $@
Specific rules¶
$(TARGET): $(OBJECTS) $(CC) $^ -o $@
Phony targets at the end¶
.PHONY: all clean install
clean: rm -f *.o $(TARGET) ```의 경우
오류 처리¶
```makefile
Check for required tools¶
ifeq ($(shell which $(CC)),) $(error Compiler $(CC) not found) endif
Validate variables¶
ifndef SOURCES $(error SOURCES variable is not defined) endif
Conditional compilation¶
ifeq ($(shell pkg-config --exists gtk+-3.0; echo $?),0) CFLAGS += $(shell pkg-config --cflags gtk+-3.0) LDFLAGS += $(shell pkg-config --libs gtk+-3.0) else $(warning GTK+ 3.0 not found, building without GUI) endif ```에 대하여
성능 팁¶
```makefile
Use order-only prerequisites for directories¶
\((OBJECTS):|\)(OBJDIR)
Minimize shell calls¶
SOURCES := $(shell find src -name '*.c')
Use built-in rules when possible¶
Instead of:¶
%.o: %.c¶
$(CC) $(CFLAGS) -c $< -o $@¶
Just use the built-in rule¶
Parallel-safe directory creation¶
$(OBJDIR): @mkdir -p $@ ```의 경우
통합¶
버전 제어¶
카지노사이트
패키지 관리자¶
카지노사이트
문제 해결¶
일반적인 문제¶
카지노사이트
Debugging 팁¶
카지노사이트
지원하다¶
- ** 공식 매뉴얼**: gnu.org/software/make/manual
- GNU: gnu.org/software/make
- 문: makefiletutorial.com
- ** 모범 사례**: clarkgrubb.com/makefile-style-guide