CMake๋ฅผ ์ด์šฉํ•œ C/C++ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ

๋ฐ˜์‘ํ˜•

Makefile์ด๋ผ๋Š” ๊ฒƒ์„ ํ•œ ๋ฒˆ ์ฏค์€ ๋‹ค๋“ค ๋“ค์–ด๋ณด์…จ์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. 


Visual Studio IDE ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜๋ฉด Makefile์„ ์˜คํžˆ๋ ค ๋ณด๊ธฐ ํž˜๋“ค ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, Unix, Linux์—์„œ C, C++ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜์…จ๋‹ค๊ฑฐ๋‚˜ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด, ํ•œ ๋ฒˆ ์ฏค์€ ๋‹ค๋“ค ์ ‘ํ•ด๋ณด์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


Makefile

์ด ํฌ์ŠคํŠธ๋Š” CMake์— ๋Œ€ํ•œ ํฌ์ŠคํŠธ์ด์ง€๋งŒ, ๊ทธ ์ „์— Makefile์ด๋ž€ ๊ฒƒ์— ๋Œ€ํ•ด์„œ ๋ช‡ ๊ฐ€์ง€ ์ ์–ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.


ํ˜น์‹œ ์ €์˜ ๋ธ”๋กœ๊ทธ์—์„œ OpenCV ์„ค์น˜์™€ ๊ด€๋ จ๋œ ํฌ์ŠคํŠธ๋ฅผ ๋ณด์‹  ๋ถ„์ด๋ผ๋ฉด, ์•„๋งˆ ์ด๋Ÿฐ ๋‚ด์šฉ์„ ๋ณด์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


$ make -j $(nproc)
$ sudo make install

์—ฌ๊ธฐ์„œ ์ค‘์ ์ ์ธ ์ปค๋งจ๋“œ๋Š” make ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค make ๋ช…๋ น์–ด๊ฐ€ ๋“ค์–ด๊ฐ„ .sh ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜์…”์„œ ์ง์ ‘ ์ˆ˜๋™ ์„ค์น˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ๋„ ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ. ๋Œ€๋ถ€๋ถ„ ๋ชจํƒœ๋Š” make ๋ช…๋ น์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


Windows์—์„œ๋„ Mingw๋‚˜ Cygwin์„ ์‚ฌ์šฉํ•ด์„œ GNU Make for Windows ํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•ด make ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•˜์‹ค ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ˜น์‹œ Windows ์‚ฌ์šฉ์ž๋ผ๋ฉด, ์ด ๋ถ€๋ถ„์„ ์ฐธ๊ณ ํ•ด๋ณด์…”์„œ ํ•œ ๋ฒˆ ์‹ค์Šตํ•ด๋ณด์‹œ๋Š” ๊ฒƒ๋„ ๋‚˜์˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


๋ณธ๋ก ์œผ๋กœ ๋„˜์–ด๊ฐ€์„œ, Makefile์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Makefile์€ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด C, C++ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ, ๋ฏธ๋ฆฌ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ์กฐ์„ฑํ•ด๋†“๋Š” ์ผ์ข…์˜ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ํ•œ ๋ฒˆ ๋ณด๋„๋ก ํ•˜์ฃ .


๊ทธ์ € ํ”„๋กœ์ ํŠธ ํ•˜๋‚˜ ์ž‘์„ฑํ–ˆ์„ ๋ฟ์ธ๋ฐ, Makefile์— ์—„์ฒญ๋‚œ ๋‚ด์šฉ์„ ๋„๋ฐฐํ•ด๋ฒ„๋ฆฐ CLion....


์œ„ ์‚ฌ์ง„์€ ์šฐ๋ฆฌ๊ฐ€ C, C++ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ํ›„, ๋นŒ๋“œ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฐ€์žฅ 1๋ฒˆ์งธ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ๋ฐ”๋กœ object ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด์ฃ . Visual Studio๋‚˜ CLion ๋“ฑ์˜ IDE ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ‚ค๋ณด๋“œ ๋‹จ์ถ•ํ‚ค ํ˜น์€ ๋งˆ์šฐ์Šค ํด๋ฆญ์œผ๋กœ ์ด ๋ชจ๋“  ๊ฒƒ์ด ์ž๋™์œผ๋กœ ๋˜์ง€๋งŒ, vim ์—๋””ํ„ฐ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ํ•  ๊ฒฝ์šฐ์—๋Š” ์ง์ ‘ ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


์ž‘์„ฑ๋œ ๋ชฉ์  ์ฝ”๋“œ๋Š” ํ•œ ๊ณณ์œผ๋กœ ๋งํฌ๋˜์–ด ์ตœ์ข…์ ์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ์‹คํ–‰ ํŒŒ์ผ์ด ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๊ทธ๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฅผ ์ปค๋งจ๋“œ๋กœ ์ง์ ‘ ์ž‘์„ฑํ•œ๋‹ค๋ฉด, ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•ด์•ผํ• ๊นŒ์š”?


$ g++ -c -o main.o main.cc
$ g++ -c -o histogram.o histogram.cc

์‚ฌ์ง„์˜ ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์€ C++ ์ฝ”๋“œ์ด๋ฏ€๋กœ, g++ ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
(๋ฌผ๋ก  ํ™•์žฅ์ž๊ฐ€ cc๊ฐ€ ๋˜์—ˆ๋“ , cpp๊ฐ€ ๋˜์—ˆ๋“ , c๊ฐ€ ๋˜์—ˆ๋“  ์ƒ๊ด€์—†์ด ์•ˆ์— ์–ด๋–ค ํ—ค๋” ํŒŒ์ผ์ด๋‚˜ ์ฝ”๋“œ๋ฅผ ์ผ๋‹ค๋Š” ๊ฒƒ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ) 


์œ„ ๋‘ ๊ณผ์ •์€ ๊ฐ๊ฐ์˜ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ๋งŒ ํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ์ตœ์ข…์ ์ธ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ตœ์ข…์ ์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปค๋งจ๋“œ ํ•œ ๊ฐœ๋ฅผ ๋” ์จ์•ผํ•˜๋Š” ๊ฒƒ์ด ๋˜๊ฒ ์ฃ ?


$ g++ -o run main.o histogram.o

๋Œ€์ถฉ ์ด๋Ÿฐ ์‹์ž…๋‹ˆ๋‹ค. ๋ณธ๋ž˜ main.cc ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ํ•œ ๊ฐœ๋งŒ ์žˆ์—ˆ์„ ๋•Œ๋Š” ์ˆ˜๋™ ์ปดํŒŒ์ผ ๊ณผ์ •๋„ ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ์œ„์™€ ๊ฐ™์ด ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฌถ์Œ์œผ๋กœ ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด์•ผ๊ธฐ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. (์œ„์—์„œ๋„ 2๊ฐœ๊ฐ€ ๋์ด์ง€๋งŒ, ๊ทธ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์•„์ง„๋‹ค๋ฉด?, ๋ญ ๊ทธ ๋•Œ๋Š” ์‰˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•ด์•ผ๊ฒ ์ฃ ....;;)



Makefile์˜ ์ค‘์š”์„ฑ

๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด IDE ํ”„๋กœ๊ทธ๋žจ์—๋งŒ ์ต์ˆ™ํ•ด์ ธ ์žˆ๋‹ค ๋ณด๋‹ˆ ์ด๋Ÿฐ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์„ ๊ฐ€๋” ๋†“์น˜๊ธฐ ๋งˆ๋ จ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ž„๋ฒ ๋””๋“œํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•œ๋‹ค ๊ฑฐ๋‚˜ GUI ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๊ฑฐ๋‚˜, ์ด๋Ÿฐ ๊ทนํ•œ์˜ ์ƒํ™ฉ์ด ์˜ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?


์ •์„๋Œ€๋กœ๋ผ๋ฉด, ์œ„ ์ปค๋งจ๋“œ๋ฅผ ์ผ์ผ์ด ๋‹ค ๋•Œ๋ ค์„œ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ผ๋งˆ๋‚˜ ๋ฒˆ๊ฑฐ๋กœ์šด๊ฐ€์š”... (์ด๋ ‡๊ฒŒ๋‚˜ ์Šฌํ”Œ์ˆ˜๊ฐ€.)

์•„๋‹ˆ๋ฉด, ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์งœ๋ณด๋„๋ก ํ• ๊นŒ์š”?


#!/bin/sh
g++ -c -o main.o main.cc
g++ -c -o histogram.o histogram.cc
g++ -o run main.o histogram.o

์Œ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด๋„ ๋‚˜์˜์ง€ ์•Š๊ฒ ๊ตฐ์š”. ๊ทธ๋Ÿฐ๋ฐ, ์™œ IDE ๋„๊ตฌ๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•„๋‹Œ Makefile์„ ์“ฐ๋Š” ๊ฒƒ์ผ๊นŒ์š”? 


Makefile์—๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ Incremental build ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ๋‚ด ํ”„๋กœ์ ํŠธ์˜ ์ˆ˜ ๋งŽ์€ ์†Œ์Šค ์ฝ”๋“œ ์ค‘ ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ์„ ๊ณจ๋ผ๋‚ด์„œ ์žฌ๋นŒ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ฑฐ๋‚˜ ๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๊ต‰์žฅํžˆ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.


๊ธฐ๋ณธ์ ์ธ Makefile์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.


CC=g++
CFLAGS=-g -Wall
OBJS=main.o histogram.o
TARGET=run
$(TARGET): $(OBJS)
    $(CC) -o $@ $(OBJS)
main.o: histogram.cc main.cc
histogram.o: histogram.cc

๊ฐ„๋‹จํžˆ ์„ค๋ช…๋“œ๋ฆฌ์ž๋ฉด, CC๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ปดํŒŒ์ผ๋Ÿฌ ๋ช…๋ น์–ด์„ ๋ณ€์ˆ˜๋กœ, FLAGS๋Š” ๋’ค์— ๋“ค์–ด๊ฐ€๋Š” ์ธ์ž ๊ฐ’์„ ๋ณ€์ˆ˜๋กœ, OBJS๋Š” ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ๋ช…์„ ๋ณ€์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ž‘ ์œ ์‚ฌํ•˜๊ธฐ ๋–„๋ฌธ์— ๋ณ€์ˆ˜ ์„ ์–ธ์—๋„ ์ž๋ฃŒํ˜•๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ทธ๋ƒฅ ์„ ์–ธ์„ ํ•ด์ฃผ๊ณ , ์‚ฌ์šฉํ•  ๋•Œ๋Š” $๋ฅผ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๊ทธ๋ฆฌ๊ณ , ์œ„ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•œ ๋ณ€์ˆ˜๋Š” make ํ”„๋กœ๊ทธ๋žจ์— ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ๋‚ด์žฅ ๋ณ€์ˆ˜์ด๋ฏ€๋กœ, ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.



CMake

๊ทธ๋Ÿผ CMake๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๋ณด๋‹ค์‹œํ”ผ ๊ฐ„๋‹จํ•œ Makefile์˜ ์ž‘์„ฑ์€ ์‰ฌ์› ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์—ฐ๋™ ๋“ฑ์ด๋‚˜ ํŒŒ์ผ์ด ์ปค์ง€๊ฒŒ ๋  ๊ฒฝ์šฐ, Makefile์˜ ์ฝ”๋“œ ์ˆ˜๋„ ๊ทธ๋งŒํผ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์›Œ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์ค„์—ฌ์„œ ์“ฐ๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. (ํ—... ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ• ์ˆ˜๊ฐ€)

JetBrains CLion ํ”„๋กœ๊ทธ๋žจ์€ CMake๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.



CMake ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

๋จผ์ € CMake ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

add_executable(run main.o histogram.o)

๋”ฑ ์ด ํ•œ ์ค„๋งŒ ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  CMakeLists.txt ํŒŒ์ผ๋กœ ์ €์žฅํ•œ ํ›„, ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด...

$ cmake CMakeLists.txt

๊ทธ๋Ÿผ ์„ฑ๊ณต์ ์œผ๋กœ Makefile์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ๋†€๋ž๊ฒŒ๋„ Makefile ์•ˆ์—๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ผ๋˜ Add_Executable ์™ธ์— ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์ž๋™์œผ๋กœ ์ž‘์„ฑ๋œ ๊ฒƒ์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ทธ๋ž˜์„œ CLion ๋“ฑ์˜ IDE ํ”„๋กœ๊ทธ๋žจ์—์„œ๋„ CMakeLists.txt ํŒŒ์ผ๋งŒ ํ•œ ๋ฒˆ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜๋ฉด, ์ž๋™์œผ๋กœ Makefile์ด ๋ฐ”๋€Œ๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์‹ค์ƒ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ ‡๊ฒŒ ๋ณต์žกํ•œ Makefile์„ ๊ณ ์น˜๊ฑฐ๋‚˜ ๋ฐ”๊พธ๋Š” ์ผ์ด ์—†์ด ์‰ฝ๊ฒŒ C, C++ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.



CMake ์‘์šฉ

๊ทธ๋Ÿผ CMake๋ฅผ ์‘์šฉํ•ด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ถ”๊ฐ€ ๋“ฑ์„ ํ•œ ๋ฒˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ๋ฆฌ๊ฐ€ C++์—์„œ Boost ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ์•„๋ž˜์˜ ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

g++ main.cc -o run -l boost_thread -l boost_system

์†Œ์Šค ์ฝ”๋“œ๊ฐ€ main.cc ํŒŒ์ผ์ด๋ผ๊ณ  ํ•  ๋•Œ, Boost ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ Thread์™€ system์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, l ์ธ์ž ๊ฐ’์„ ์‚ฌ์šฉํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งํฌํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. 


cmake_minimum_required(VERSION 3.6)

# ๊ณตํ†ต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํŒจํ‚ค์ง€
find_package(Boost 1.60 COMPONENTS system filesystem thread REQUIRED)
include_directories($(Boost_INCLUDE_DIRS))

target_link_libraries(hoGarden ${SOURCE_FILES})

๋ง๋ถ™์—ฌ์„œ filesystem๊นŒ์ง€ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, find_package์— filesystem์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

๊ทธ ์™ธ์— ์ปดํŒŒ์ผ ์˜ต์…˜์„ ๊ณตํ†ต์œผ๋กœ ์ฃผ๊ฑฐ๋‚˜ ํ”„๋กœ์ ํŠธ ๋ฒ„์ „์„ ๋ช…์‹œํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์‹ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.


cmake_minimum_required(VERSION 3.6)

# ํ”„๋กœ์ ํŠธ ์ •๋ณด.
project(hoGarden)
set(PROJECT_VERSION_MAJOR 0)
set(PROJECT_VERSION_MINOR 1)

# CMake C++11
set(CMAKE_CXX_STANDARD 11)

# ์ปดํŒŒ์ผ๋Ÿฌ
set(CMAKE_C_COMPILER "g++")

# ๋งํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
LINK_LIBRARIES(boost_thread boost_asio)

# ์ปดํŒŒ์ผ ์˜ต์…˜
ADD_COMPILE_OPTIONS(-g -Wall)
set(CMAKE_EXE_LINKER_FLAGS "-static -Wl, --gc-sections")

# ๊ณตํ†ต ํ—ค๋” ํŒŒ์ผ, ํŒจํ‚ค์ง€
find_package(Boost 1.60 COMPONENTS system filesystem thread REQUIRED)
include_directories($(Boost_INCLUDE_DIRS))

set(SOURCE_FILES main.cpp)
add_executable(hoGarden ${SOURCE_FILES})

target_link_libraries(hoGarden ${SOURCE_FILES})


๋งˆ์น˜๋ฉฐ...

IDE ํ”„๋กœ๊ทธ๋žจ๋งŒ์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ make๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋‹ˆ ์ด๋Ÿฐ์ €๋Ÿฐ ํ—ท๊ฐˆ๋ฆฌ๊ณ , ์–ด๋ ค์šด ๊ตฌ์„์ด ๋งŽ์•„ ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


์•„๋ฌด๋ž˜๋„ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด์„œ ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์น˜ ํŒจํ‚ค์ง€๊ฐ€ ์ œ๊ณต๋œ๋‹ค๋ฉด ๋”ํ•  ์—†์ด ์ข‹๊ฒ ์ง€๋งŒ, ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ๊ทธ๋žจ์„ ์ง์ ‘ ์งœ๋ณด๊ณ , ์ˆ˜์ •ํ•˜๊ณ , ํ…Œ์ŠคํŠธํ•  ๋•Œ (ํŠนํžˆ C, C++ ์–ธ์–ด)๋งŒํผ์€ IDE ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์ง์ ‘ make ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ํ…Œ์ŠคํŒ… ํ™˜๊ฒฝ์„ ๊ตฌ์ถ• ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆํžˆ ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


๋ฌด์—‡๋ณด๋‹ค ์ด๋Ÿฐ ํ”„๋กœ์ ํŠธ์˜ ์„ค์ • ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‘๋ฉด, ๋‚˜์ค‘์— ์ผ์ผ์ด ์ฐพ์•„ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š์•„๋„ ํ•œ ๋ฒˆ ์ž‘์„ฑํ•ด๋†“์œผ๋ฉด ์—ฌ๋Ÿฌ๋ชจ๋กœ ํŽธ๋ฆฌํ•ด์ง€๋‹ˆ ์•Œ์•„๋‘๋Š” ๊ฒƒ๋„ ๋‚˜์˜์ง€ ์•Š๋‹ค ์ƒ๊ฐํ•ด๋ด…๋‹ˆ๋‹ค.


๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments