콘텐츠로 이동

회사 소개

제품정보

사이트맵 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 팁

카지노사이트

지원하다