GithubHelp home page GithubHelp logo

makepractice's Introduction

MakePractice

make 연습

Step

Step 1 : 매우 귀찮게 계산기 코딩하기

가능한 여러 파일로 쪼개서 계산기를 코딩해본다. (src 디렉토리)

Step 2 : gcc/g++로 빌드(컴파일 및 링크) 해보기

디렉토리 생성

mkdir ./obj # 목적 프로그램
mkdir ./bin # 실행 프로그램

컴파일

g++ -c -o ./obj/calculator.o ./src/calculator.cc
g++ -c -o ./obj/adder-module.o ./src/adder-module.cc
g++ -c -o ./obj/subtractor-module.o ./src/subtractor-module.cc
g++ -c -o ./obj/multiplier-module.o ./src/multiplier-module.cc
g++ -c -o ./obj/divider-module.o ./src/divider-module.cc
g++ -c -o ./obj/main.o ./src/main.cc

링크

g++ -o ./bin/calc.out ./obj/calculator.o \
                      ./obj/adder-module.o \
                      ./obj/subtractor-module.o \
                      ./obj/multiplier-module.o \
                      ./obj/divider-module.o \
                      ./obj/main.o

테스트

./bin/calc.out

실행결과

The program is starting.
Calculator and modules are loaded.
Modules are attached to calculator.
Testing some expression.
1 + 2 = 3
10 - 7 = 3
3 x 4 = 12
48 / 8 = 6
Testing complete.
The program is started.
== USAGE ==
COMMAND number number
COMMAND: add|sub|mul|div|exit
===========
>add 1 2
3
>add 999 999
1998

Step 3 : Makefile 작성해보기

Makefile의 양식

target:   dependencies ...
          commands
          ...

Makefile 작성 (들여쓰기는 Space가 아닌 Tab 문자여야 함.)

build:
	g++ -c -o ./obj/calculator.o ./src/calculator.cc
	g++ -c -o ./obj/adder-module.o ./src/adder-module.cc
	g++ -c -o ./obj/subtractor-module.o ./src/subtractor-module.cc
	g++ -c -o ./obj/multiplier-module.o ./src/multiplier-module.cc
	g++ -c -o ./obj/divider-module.o ./src/divider-module.cc
	g++ -c -o ./obj/main.o ./src/main.cc
	g++ -o ./bin/calc.out ./obj/calculator.o ./obj/adder-module.o ./obj/subtractor-module.o ./obj/multiplier-module.o ./obj/divider-module.o ./obj/main.o

Step 4 : make로 빌드(컴파일 및 링크) 해보기

make 명령어 입력

터미널에 make 또는 make build 입력.

  • make : Makefile에서 첫 번째 target(=build)이 수행된다.
  • make build : 위 Makefile에서 target이 build이므로 build에 해당하는 명령이 수행된다.

출력

g++ -c -o ./obj/calculator.o ./src/calculator.cc
g++ -c -o ./obj/adder-module.o ./src/adder-module.cc
g++ -c -o ./obj/subtractor-module.o ./src/subtractor-module.cc
g++ -c -o ./obj/multiplier-module.o ./src/multiplier-module.cc
g++ -c -o ./obj/divider-module.o ./src/divider-module.cc
g++ -c -o ./obj/main.o ./src/main.cc
g++ -o ./bin/calc.out ./obj/calculator.o ./obj/adder-module.o ./obj/subtractor-module.o ./obj/multiplier-module.o ./obj/divider-module.o ./obj/main.o

Step 5 : 깔끔하게 정리해보기

Compile과 Build 나누기

Makefile 변경

build: compile_main
	g++ -o ./bin/calc.out ./obj/calculator.o ./obj/adder-module.o ./obj/subtractor-module.o ./obj/multiplier-module.o ./obj/divider-module.o ./obj/main.o

compile_main: compile_calculator compile_module
	g++ -c -o ./obj/main.o ./src/main.cc

compile_calculator:
	g++ -c -o ./obj/calculator.o ./src/calculator.cc

compile_module:
	g++ -c -o ./obj/adder-module.o ./src/adder-module.cc
	g++ -c -o ./obj/subtractor-module.o ./src/subtractor-module.cc
	g++ -c -o ./obj/multiplier-module.o ./src/multiplier-module.cc
	g++ -c -o ./obj/divider-module.o ./src/divider-module.cc

make 또는 make build 실행하였을때 출력은 위와 동일.

  1. buildcompile_main에 의존하고 있으므로 compile_main가 먼저 수행
  2. compile_maincompile_calculatorcompile_module에 의존하므로 각 항목을 먼저 수행
  3. 따라서 build를 하기 위해서는 compile_calculator, compile_module, compile_main, build 순서대로 수행된다.

이외에 Make의 Rule이나 Macro 등이 있지만 이것들은 나중에 해보기로...

끝.

makepractice's People

Contributors

smartse0k avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.