cmake »ç¿ë±â
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
  • 2011/3/17

Contents

1 cmake ¼Ò°³
1.1 kdevelop ¿Í cmake
1.2 cmake ¿Í automake
2 cmake ½ºÅ©¸³Æ® ¸¸µé±â
2.1 Makefile ¸¸µé±â
2.2 ¶óÀ̺귯¸® ¸¸µé±â
2.3 ¼­ºê µð·ºÅ丮·Î °èÃþÀû ÇÁ·ÎÁ§Æ® °ü¸®

1 cmake ¼Ò°³

MakefileÀ» ¸¸µé±â À§Çؼ­ qmake¸¦ »ç¿ëÇØ¿Ô´Ù. »ç¿ëÇϱ⠰£´ÜÇϱ⠶§¹®Àε¥, ÀÏ´Ü qmake·Î MakefileÀ» ¸¸µé°í, ȯ°æ¿¡ ¸Â°Ô ¼ÕÀÛ¾÷ÇÏ´Â ½ÄÀÌ´Ù.

°£´ÜÇÑ ¹æ¹ýÀ̱â´Â Çѵ¥, ¿©·¯ Ç÷¿Æû¿¡ Æ÷ÆÃ°¡´ÉÇÑ makefileÀ» ¸¸µé±â°¡ ¿©°£ ±î´Ù·ÓÁö ¾Ê´Ù´Â ¹®Á¦°¡ ÀÖ´Ù. ±×·¡¼­ »ç¿ëÇÑ°Ô automake. ±Ùµ¥ À̰Š³Ê¹« º¹ÀâÇÏ´Ù. ±×·¡¼­ kdevelop¸¦ ÀÌ¿ëÇØ¼­ automake ÆÄÀÏÀ» ¸¸µé°í ¼öÁ¤ÇÏ´Â ¹æ½ÄÀ¸·Î automake¸¦ ÀÌ¿ëÇß´Ù. ¾Æ¸¶ kdevelop3.x ±îÁö automake¸¦ »ç¿ëÇß´ø °ÍÀ¸·Î ¾Ë°í ÀÖ´Ù.

±× µÚ ÇÑ 2³âÀº automake ÅøÀ» Àؾî¹ö¸®°í »ê°Å °°´Ù. ½Ã½ºÅÛ/³×Æ®¿öÅ© ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡¼­ À¥ ¼­ºñ½º °³¹ß·Î C/C++ ÇÁ·ÎÁ§Æ®¸¦ ÇÒÀÏÀÌ °ÅÀÇ »ý±âÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù.

1.1 kdevelop ¿Í cmake

ÀÚµ¿ ºôµå Åø¿¡ °ü½ÉÀ» °¡Áö°Ô µÈ °Ç kdevelop¸¦ °³¹ßÅø·Î »ç¿ëÇϸ鼭 ºÎÅÍ´Ù. kdevelop.. ÈǸ¢ÇÑ °³¹ßÅøÀ̱ä Çѵ¥, ±×µ¿¾È »ç¿ëÇÏÁö ¾Ê¾Ò´ø ÀÌÀ¯´Â ¼øÀüÈ÷ vim ۸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù´Â °Í ¶§¹®À̾ú´Ù. ±×·±µ¥ ¾ðÁ¨°¡ ºÎÅÍ kdevelop¿¡ vim۰¡ Áö¿øµÇ±â ½ÃÀÛÇß´Ù. 4.0ºÎÅϰ¡ ? ¾Æ¹¸µç ±×·¡¼­ kdevelop¸¦ »ç¿ëÇØ±â·Î Çߴµ¥.

ºôµåÅø·Î automake ´ë½Å cmake¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.

1.2 cmake ¿Í automake

ÀÏ´Ü automake¿¡ ´ëÇÑ ±â¾ïÀº ÁÁÁö ¾Ê´Ù. ºôµå ÆÄÀÏÀ» ¸¸µå´Â°Ô ³Ê¹« º¹ÀâÇ߱⠶§¹®ÀÌ´Ù. Áö±Ýµµ ±×¶§µµ ³­ automake ºôµåÆÄÀÏÀ» ¸¸µé ÀÚ½ÅÀÌ ¾ø´Ù. ±×³ª¸¶ kde°¡ ÀÚµ¿À¸·Î ¸¸µé¾îÁá±â ¶§¹®¿¡ »ç¿ëÇßÁö.

cmakeµµ automake¿Í ¸¶Âù°¡Áö·Î ½ºÅ©¸³Æ® ÆÄÀÏÀ» Àо, ÇØ´ç Ç÷§Æû¿¡¼­ ºôµåÇϱâ À§ÇÑ ÇÁ·ÎÁ§Æ® ÆÄÀϵéÀ» ¸¸µç´Ù. ¸®´ª½º¶ó¸é Makefile À©µµ¿ì¶ó¸é Visual Studio ÇÁ·ÎÁ§Æ® ÆÄÀÏ, AppleÀº Xcode¸¦ ¸¸µé¾îÁØ´Ù.

2 cmake ½ºÅ©¸³Æ® ¸¸µé±â

CMakeLists.txt¿¡ cmake ¸í·ÉµéÀ» ÀÌ¿ëÇØ¼­, ºôµå ±ÔÄ¢À» ¸¸µé¸é µÈ´Ù. Å×½ºÆ®¸¦ À§Çؼ­ main.c foo.c h heooll.c¸¦ ¸¸µé¾ú´Ù.
// main.c 
#include <stdio.h> 
#include <hello.h> 
#include <foo.h> 
 
int main(int argc, char **argv) 
{ 
    pthread_self(); 
    hello("yundream"); 
    return 0; 
} 
 
// foo.c 
#include <foo.h> 
#include <stdio.h> 
 
void foo(int a, int b) 
{ 
  printf("SUM : %d + %d = %d\n", a, b, a+b); 
} 
 
// hello.c 
#include <hello.h> 
#include <stdio.h> 
 
void hello(char *name) 
{ 
    printf("Hello %s1!\n", name); 
} 
 

PROJECT(myproject) 
 
set(ROOT_DIR /home/yundream/cmake) 
set(MYLIB_PATH /home/yundream/cmake/lib) 
#set(CMAKE_VERBOSE_MAKEFILE ON) 
 
ADD_EXECUTABLE(hello main.c foo.c hello.c) 
 
set(UNITLIB ${MYAPILIB}) 
 
FIND_LIBRARY(MYAPILIB NAMES pthread PATHS /usr/lib) 
TARGET_LINK_LIBRARIES(hello sqlite3 pthread ${UNITLIB}) 
 
INCLUDE_DIRECTORIES(${ROOT_DIR}) 
 
ADD_DEFINITIONS(-Wall -DSQLITE_THREADSAFE=1 -g -O2) 
 
  • PROJECT : ÇÁ·ÎÁ§Æ® À̸§
  • SET : cmake¿¡¼­ »ç¿ëÇÒ º¯¼ö ÁöÁ¤ (À̸§ °ª1 °ª2 °ª3...), ȤÀº cmakeÀÇ È¯°æ¼³Á¤
  • ADD_EXECUTABLE : ½ÇÇàÆÄÀÏÀÇ À̸§°ú ½ÇÇàÆÄÀÏÀ» ¸¸µé±â À§Çؼ­ ÇÊ¿äÇÑ ¼Ò½ºÄÚµåµéÀ» ¸í½Ã
  • TARGET_LINK_LIBRARIES : Ÿ°ÙÀ» ¸¸µé±â À§Çؼ­ ÇÊ¿äÇÑ ¶óÀ̺귯¸®¸¦ ¸í½ÃÇÑ´Ù. gccÀÇ -l
  • INCLUDE_DIRECTORIES : Çì´õÆÄÀÏ °æ·Î, gccÀÇ -I
  • ADD_DEFINITIONS : ÄÄÆÄÀÏ ¿É¼Çµé

2.1 Makefile ¸¸µé±â

cmake ¸í·ÉÀ¸·Î Makefile¸¦ ¸¸µé¸é µÈ´Ù.
# cmake ./ 
 

2.2 ¶óÀ̺귯¸® ¸¸µé±â

ADD_LIBRARY¸¦ ÀÌ¿ëÇØ¼­ ¼Ò½ºÄڵ带 °øÀ¯ ¶óÀ̺귯¸®·Î ȤÀº Á¤Àû ¶óÀ̺귯¸®·Î ¸¸µé ¼ö ÀÖ´Ù.
# °øÀ¯¶óÀ̺귯¸®·Î ¸¸µé±â 
ADD_LIBRARY(mylib SHARED hello.c foo.c) 
 
# Á¤Àû¶óÀ̺귯¸®·Î ¸¸µé±â 
ADD_LIBRARY(mylib STATIC hello.c foo.c) 
 

2.3 ¼­ºê µð·ºÅ丮·Î °èÃþÀû ÇÁ·ÎÁ§Æ® °ü¸®

ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÏ´Ù º¸¸é, ¼­ºê ÇÁ·ÎÁ§Æ®¸¦ °ü¸®ÇؾßÇÒ °æ¿ì°¡ »ý±ä´Ù. ÀÌ °æ¿ì ¼­ºê µð·ºÅ丮 º°·Î ÇÁ·ÎÁ§Æ®¸¦ °ü¸®ÇÒ ¼ö ÀÖ´Ù.


³ª´Â À§ÀÇ myproject¸¦ µÎ°³ÀÇ ¼­¹ö ÇÁ·ÎÁ§Æ®·Î ³ª´©±â·Î Çß´Ù. Çϳª´Â ÁÖ °³¹ßÀÌ ÀÌ·ç¾îÁö´Â hello ÇÁ·ÎÁ§Æ®°í, ´Ù¸¥ Çϳª´Â ¸ðµâ Å×½ºÆ®¸¦ À§ÇÑ test ÇÁ·ÎÁ§Æ®´Ù. ±×·¡¼­ hello ¿Í test µð·ºÅ丮¸¦ ¸¸µé¾ú´Ù.
# pwd 
/home/yundream/cmaketest 
# mkdir hello test 
 
cmaketestÀÇ MakeLists.txt ÆÄÀÏÀÇ ³»¿ëÀÌ´Ù.
PROJECT(myproject) 
 
ADD_SUBDIRECTORY(hello) 
ADD_SUBDIRECTORY(test) 
 

´ÙÀ½Àº hello ¿Í test¿¡ ÀÖ´Â MakeLists.txt ³»¿ëÀÌ´Ù.
############################# 
# hello MakeLists.txt 
############################# 
PROJECT(hello) 
 
ADD_EXECUTABLE(hello main.c foo.c hello.c) 
TARGET_LINK_LIBRARIES(hello pthread) 
INCLUDE_DIRECTORIES(./) 
 
ADD_DEFINITIONS(-Wall -O2) 
 
# test ¿¡¼­ »ç¿ëÇÒ Á¤Àû¶óÀ̺귯¸®¸¦ ¸¸µé¾ú´Ù. 
ADD_LIBRARY(mylib STATIC hello.c foo.c) 
 
############################# 
# test MakeLists.txt 
############################# 
PROJECT(test) 
set(CMAKE_VERBOSE_MAKEFILE ON) 
 
ADD_EXECUTABLE(test test.c) 
 
# Á¤Àû ¶óÀ̺귯¸®¸¦ ¸µÅ©Çϱâ À§ÇÑ µð·ºÅ丮¸¦ Á¤ÀÇ  
FIND_LIBRARY(UNIT_LIB NAMES mylib PATHS /home/yundream/cmaketest/hello) 
TARGET_LINK_LIBRARIES(test pthread ${UNIT_LIB}) 
 
INCLUDE_DIRECTORIES(../hello) 
 
ADD_DEFINITIONS(-Wall -O2) 
 


EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.