git-cherry-pick - Apply the changes introduced by some existing commits

 

기존에 삽입된 commit 들중 특정 변경사항만 적용하기 

(기존에 commit 들 에서  특정 commit의 수정내용만 반영하기)

 

git 의 Merge 가 branch 를 만들고 변경된 내용 모두를(그사이에 여러 commit이 있더라도)  가져와서 합치게 된다. 

그로인해 선택적 merge가 어려운데 , 특정 commit에서 발생한 변경만 가져다가 현재 브랜치에 반영하고 싶은경우 cherry-pick을 사용하면된다. 그러면 해당 commit에 내용만 현재 브랜치에 가져와서 commit 하게 되는데. 

 

만일 현재 브랜치에 commit 은 안하고 코드 변경만 하고 싶다면   -n 파라메터를 쓰면 된다. 

 

git cherry-pick -n <SHA>

 

그러면 해당 변경분은 반영이 되고 staged 상태로 되지만 commit되지는 않은 상태라 다른 추가적인 변경이후에 commit할 수 있게 된다.

 

 

위에 실 사용예시.

 

여러 브랜치 개발을 진행하는 과정에서, 특정 브랜치로부터 최근에 수정된 부분만 혹은 특정한 과거의 수정부분들은 commit SHA 값으로 구별할 수 있는데 , 이를 이용해 해당 부분만 똑 따다가 반영 할 수 있다. 마치 체리만 딱 골라먹는것 처럼.



 오래간만에 PHP 로 작업을 하다보니. 별것 아닌것에 헤매는 경우가 좀 있습니다.


요즘 XE  모듈을 하나 만들고 있는데 디버깅하거나 에러 로그같은걸 보는것도 간단치 않네요.



그중에 XE 모듈에서 뷰화면을 위해   some.view.admin.php  파일을 만들을 만들어서 실행시키는 데 아래와 같은 에러가 발생합니다.





페이지에 코딩에러 문제 인가 해서 찾아봤는데도 특별한 문제가 없었는데. 인터넷을 뒤져 보니 DisplayHandler.class.php 에 $this->gz_enabled = false를 해주라는 얘기가 있더군요.  물론 그렇게 해도 에러가 발생하지 않는데 뭔가 이상했습니다.


그래서 좀더 찾아보니  php 작성시 <?php  ...내용... ?>  이렇게 작성할때  ?> 뒤에 빈 공간등이 있으면 그런 문제가 발생한다는 얘기가 있더군요.    그래서 (?>) 뒷부분을 보니 줄바꿈이 있어서 제거를 하니 에러 없이 잘 나왔습니다.


그래서 여기서 이러한 불편한 문제를 위해  php 문법에서는 순수 php 파일인 경우 굳이 ?>로 닫지 않아도 되도록 하고 있었습니다.   ?> 뒤에 문자가 들어가서 뜻 하지 않은 내용이 전송되거나 하는것을 막기위해   ?> 없는경우에는 파일의 끝에 다다르면 자동으로 php 영역의 끝으로 보는거죠.


아래 php 사이트에 있는 기본 문법내용입니다. 제가 빨갛게 테두리 친 부분을 보면 그런 얘깁니다.



http://www.php.net/manual/en/language.basic-syntax.phptags.php




그래서  XECore 소스를 내려 받아 살펴보면 class.php, view.php 파일들에 ?> 로  굳이 닫지 않고 있습니다. 


괜히 열심히 닫다가 에러만 유발 시키는 것보단 확실하죠.





시간,장소: 2013 년 5월 30일 10시~17시 ,  양재역 엘타워

컨퍼런스  만족도 : 좋았음.





요즘 임베디드 플렛폼에 대한 관심이 많던차에.  산업통상자원부 주최, 정보통신산업진흥원 주관하는 임베디드 SW 컨퍼런스에 다녀왔다.


  사실 작년인가 재작년인가?  정부기관 주최하는 SW 컨퍼런스를 갔었는데.. 그때도 정치인들 축사하고 나서 본 행사가 별로 실속이 없어 이번에도 별기대를 안했었는데.. 기대를 안해서일까...  이번에 내용이 참 좋았던것 같다.





가장괜찮았던 순서대로 정리해보면 (Track A를 들은 본인 기준)


공개 소프트웨어 기반 임베디드 플랫폼 전략(한성대 이민석 교수)  


-  일단 많은 SW 개발자들이 궁금해하고 꼭 알아야할 오픈 소스 라이센스에 대한 부분을 상세히 다루어 주었고, 오픈소스를 바라볼 우리의 자세와.. 전략적 접근 방법에 대해서 얘기를 해주어..  듣는 동안 여러가지 영감(?)을 주었던것 같다.  앞으로 회사에서 할 계획중 몇가지는 오픈소스로 진행해 봐야 겠다는 생각이 듬.  평점 4.9점  (5점만점 기준)


WebOS for Smart Devices (LG전자 홍성표 연구위원)  

 - 사실 강사 전달은 감동(?)적이진 않았는데.   WebOS에 대해서 관심이 생기는 기회가 되었다.  올해 2월에  LG전자가 HP로 부터 WebOS 를 인수한 일은 알고있었고 그때는  삼성따라 OS좀 확보해보려는건가 싶었는데.   근데  WebOS가 오픈소스(아파치 라이센스  http://www.openwebos.org) 프로젝트로 진행되고 있고,  내부 아키텍처를 보아하니 Runa 버스구조에  특히나. 요즘내가 잘쓰는 Qt5 기반이라는점과 Node.js 를 포팅하고 있고,  최근 급 관심을 같게된 OpenEmbedded Build 와  Yocta Project BSP 까지 아우르고 있어.  이거.. 임베디드용으로 딱일 수 있겠다는 생각을 갖게 해주었다.  평점 4점


스마트 디바이스 기술현황 및 전망 (삼성전자 서상범 상무)

- 삼성전자 SW 랩이 하는 일이 뭔가 살짝 알게되었는데..  요즘 Tizen 관련해서 일을 하시는분 같았다.  Tizen 에 대해서는 처음알게 되었는데.  삼성전자가 새롭게 적극 참여하고 있는 오픈소스 프로젝트인데.  해당 오픈소스 프로젝트의 SDK가 오픈소스가 아니고, 라이센스도 복잡한 상황이라는 것을 알게 되어.  그냥 삼성전자가 안드로이드에 대한 대안으로 준비하는 스마트폰용 OS일 뿐인듯해서.  Tizen 자체를 어디가 가져다 쓸것은 못된다는 생각이 들었다. 

 그래도 강의 초반에 스마트에 대한 정의의 고찰을 해보게 해서.  대체로 괜찮았긴 했는데.. 강의자료가 자료집에 미리 준비 안되있어 준비성 부족으로 -0.5 점 그래서  평점 3.5 점



임베디드SW 정책동향 ( 산업통상자원부 김정일 전자부품과장) 

-  과장님이 말씀을 빠르게 하신덕분에...점심 시작시간이 애매해지긴 했는데.(그래도 지루한시간이 좀 줄어서 좋았음) 

중소기업들이 임베디드 프로젝트를 기획하면서 정부지원을 받고자 하는경우에 알아두면 좋을것들을 얘기해서 나름 유익(?) 할듯. 평점 3.5점


그리고 나머지 한분.  요번 해양수산부장관 되신분이 떠올랐었음. 


   전체적으로 컨퍼런스  유익했음.   장소도 맘에 들었고.  내년에도 기대해 볼텐데...  정부 연구기관 강사들은 좀더 쓸만한 얘기를 들고 왔음 좋겠다는생각.(자신들 실적발표하지 마시고...)  최근에는  대학교수님들들 통해 오히려 현실적인  유익한 강의를 들은적이 많은듯 하다.


아 그리고.... 정치인과 그 주변인 축사는 좀 뺐으면.  주최가 정부기관에서 하는거라 이해는 하지만.. 쓸데없이 오전시간 낭비한다는 생각이 듬.   


    QT 5.0.2 로 업그레이드 하고 아직 프로젝트에는 적용해보진 못하고 테스트 중인 상태인데.  


QT Installer 1.3  버그때문에  QT Installer를 다시 빌드하려고 하다보니.


 먼저  QT 5.0.2를 소스를 가져다 빌드를 했다.


   QT는 상용 라이센스와 LGPL 라이센스를 적용하고있는데.  LGPL라이센스를 사용하는 경우에는 DLL링크만 허용하고 있어 Static 빌드 Library를 쓸일이 없지만 .  QT Installer 는 LGPL 라이센스 이면서 QT Library를  Static Build가 되어있는 구조라 QT Installer 를 재빌드 하려면 어쩔수 없이 QT를 Static Build 한뒤에 QT Installer 를 빌드해야 해서.  이런 상황이 된다.  (인스톨러 특성상 하나의 실행파일로 떨어져야 하기때문에...)


어째든 QT SDK 5.0.2 를 빌드하려고 하는데.  오픈소스 빌드가 그러하듯 수차례... 빌드 실패 후 겨우 성공하게 되서 정리해 본다.


먼저 필요한 것들 정리하기


1. Perl 설치 

   기존설치된 Perl이 없다면  

ActivePerl http://www.activestate.com/activeperl/downloads  에서 (x64버전) 다운로드 설치


2. Python 설치

   V8.lib를 빌드하기 위해서는 python 이 필요하다.  

ActivePython http://www.activestate.com/activepython/downloads  에서 다운로드(2.7.x x64버전 ) 설치 



1. OpenSSL static 빌드 준비

    2.1  OpenSSL  Library Source

         http://www.openssl.org/source/openssl-1.0.1e.tar.gz

         압축해제 경로 - > C:\DEVTOOL\qt5build\openssl-1.0.1e_src


    2.2  nasm 어셈블러 

   http://www.nasm.us/ 에서 다운로드 링크로 가서 최신버전 다운로드

 여기서는 아래 링크의 zip 파일을 내려받음

         http://www.nasm.us/pub/nasm/releasebuilds/2.10.07/win32/nasm-2.10.07-win32.zip

  

        다운로드 받아 압축해제 

                   설치경로-->C:\DEVTOOL\qt5build\nasm-2.10.07


    2.3 OpenSSL 빌드하기 

         2.3.1 MSVC 2012 용 x86 네이티브 도구 명령 프롬프트 실행


         2.3.2 NASM 경로 PATH 추가

                   SET PATH=%PATH%;C:\DEVTOOL\qt5build\nasm-2.10.07


         2.3.3 configure 실행   (C:\=C:\DEVTOOL\libs\openssl 경로에 설치시)

                  > CD C:\DEVTOOL\qt5build\openssl-1.0.1e_src

                  > perl Configure VC-WIN32 --prefix=C:\DEVTOOL\libs\openssl -MT

                  > ms\do_nasm

         2.3.4 빌드 및 설치

                  > nmake -f ms\nt.mak

> nmake -f ms\nt.mak test

                  > nmake -f ms\nt.mak install 


        2.3.5 설치결과확인
                  C:\DEVTOOL\libs\openssl



2. ICU static Build


빌드 방법은 2가지 인데.. Cygwin 환경에서 빌드하는경우 MSVC 2008 이하에 대해서


   ICU 는 기본적으로 바이너리는 동적 빌드 버전만 제공하고 있어서 static 빌드를 하려면 소스를 내려 받아 새로 빌드 해야함.

http://www.npcglib.org/~stathis/blog/2012/06/17/windows-task-build-the-icu-library-for-32-bit-and-64-bit/


위 링크에 가면 .bat 파일로 빌드하기 편하게 만들어놓은 배치파일이 있음. 이를 활용하면 되는데. Cygwin은 별도로 받아서 설치가 필요하다. (해당 페이지에있는 Portable Cygwin은 구버전이라 설치 되지 않았다.)


MSVC2010 이상이면  MSVC에서 

 <ICU>\source\allinone\allinone.sln   (솔루션)파일을 열어 원하는 형식으로 빌드해주면 간단히 끝난다.





3. QT 5.0.2 SDK 소스 다운로드및  MSVC2012 준비 하기  

   소스 리파지토리에서 Git  clone으로 받을 수 도 있겠지만. 확인해보지 못했고,

   윈도우용 QT SDK를 빌드하려면  아래 경로에서 받은 소스파일 묶음을 받아 진행했다.

   http://download.qt-project.org/official_releases/qt/5.0/5.0.2/single/qt-everywhere-opensource-src-5.0.2.zip

( 참고로 다른  *.tar.gz 파일을 받을 경우 configure.exe 가 없는 등 해당 압축은 윈도우환경에서  빌드 문제가 있음)

여기에서는 [C:\qt5build\qt-everywhere-opensource-src-5.0.2] 경로로 압축 해제된것으로 한다.


 - 3.1 MSVC 2012 준비 

    MSVC는  C:\MSDEV\MSVC2012P 와 같은 띄어쓰기 없는 경로에 설치할 것을 권장한다.  그래야 나중에 다른 관련 빌드를 하는데 문제가 발생하지 않는다. (그렇지 않으면 좀 고생할 수 도 있음)


 - 3.2 MS Direct X SDK (2010 June 버전) 빌드 준비 (Optional)

    Direct X 는 빌드 옵션에 따라 필요 할 수 도 있다.

    설치시에는  MSVC와 마찬가지로  C:\MSDEV\DIRECTX_SDK  와 같은 띄어쓰기 없는 경로에 설치하기 바람.



4. 빌드하기 


  4.1  MSVC  CMD 프롬프트 실행


MSVC를 이용한 빌드를 하려면 관련 환경변수값 (PATH등)이 필요한데. MSVC가 설치된 프로그램목록에서 [VS2012용 개발자 명령 프롬프트]를 실행시켜 주면된다.


 4.2 관련 CMD 프롬프트 에서 관련 PATH 추가 

 

SET PATH=%PATH%;C:\qt5build\jom;C:\qt5build\libs\openssl\bin


SET LIB=%LIB%;C:\qt5build\libs\openssl\lib;C:\qt5build\libs\icu-51-1\libs\lib

SET INCLUDE=%INCLUDE%;C:\qt5build\libs\openssl\include;C:\qt5build\libs\icu-51-1\libs\include


4.3 configure.bat 실행


configure.bat -prefix c:\qt502_static -static -debug-and-release -platform win32-msvc2012 -developer-build -opensource -confirm-license -nomake tests -make-tool jom -openssl -nomake examples -nomake tools -nomake tests  -opengl desktop


4.4 컴파일과 링크   (멀티코어사용)


jom -j 8



  QT5.0.2 를 static 빌드를 해야 되는 과정에서 ICU 라이브러리로 필요하게되는데  해당 ICU사이트에서 배포하고 있는 바이너리 버전인 경우에는 MSVC2010 으로 되어있기도 하고,  또한 sicule.lib  같이 static build가 아닌 DLL 사용 빌드 형태이다.  


  그래서 static 빌드를 해야 하는데 그러기 위해서 필요한 순서를 정리해두려고 한다.


먼저 필요한것 부터 정리


0. MSVC 2012 

    MS Visual Studio 2012  또는 2010 이 설치되어있어 한다.


   설치 디렉토리  

           C:\DEVTOOL\MSVC2012P


1. Cygwin  환경 준비 

    http://www.cygwin.com/  에서 최신 Cygwin 다운로드 후 설치 

  

   설치에서는 Develope 관련 도구들 선택 설치할것


여기에서는 

C:\DEVTOOL\Cygwin 에서 setup.exe 파일을 넣어두고,  Cygwin 루트 디렉토리도 C:\DEVTOOL\Cygwin로 지정






2. ICU 소스 다운로드 


http://site.icu-project.org/download   에서 다운로드 할 수 있으며, 현재 기준 최신 Release 가 ICU 51 버전이어서


http://download.icu-project.org/files/icu4c/51.1/icu4c-51_1-src.zip   를 다운로드 하면 된다.


여기서는 다운로드한 파일들을  


C:\DEVTOOL\libsources\icu4c-51_1-src   경로 압축풀었다.




3. MSVC2012 를 이용한 static 빌드를 위한 몇가지  runConfigureICU 파일 수정하기


static  빌드가 문제가 없도록 하기 위해서는 runConfigureICU  파일을 수정해야한다.

수정한 파일은 runConfigureICU_static 파일명으로 변경


106,107 라인 comment out 처리 (MSVC 빌드에서는 불필요)


Cygwin/MSVC   플랫폼 설정부분에서 

/MD 로 되어 있는 부분을 /MT로 바꾼다.

또한 링커용 설정에는  

    RELEASE_LDFLAGS='/NODEFAULTLIB:MSVCRT'

를 추가하고 


    DEBUG_LDFLAGS='/DEBUG /NODEFAULTLIB:MSVCRTD'  

로 변경한다. 



4. 빌드하기 


4.1 MSVC를 이용한 빌드를 하기위해서는 관련한 환경설정을 준비해야한다. 


Command line prompt 를 실행시킨뒤  C:\DEVTOOL\MSVC2012P\VC\vcvarsall.bat  를 실행한다


또는 아래 그림을 참고해서 시작프로그램에서 [VS2012용 개발자 명령프롬프트]를 실행해도된다.


Cygwin에 bin 디렉토리 path 를 추가한다. (bash를 사용해야 해서)


> SET PATH=%PATH%;C:\DEVTOOL\Cygwin\bin



그리고  ICU 소스 디렉토리로 이동 후 runConfigureICU_static 실행한다.  


> cd C:\DEVTOOL\libsources\icu4c-51_1-src\source


static release 빌드인 경우 

> bash runConfigureICU_static Cygwin/MSVC  --prefix=/cygdrive/c/DEVTOOL/libs/icu-release-static-win32-msvc2012 --with-data-packaging=static --enable-static --disable-shared --enable-release --disable-debug 



static debug 빌드인 경우 

> bash runConfigureICU_static Cygwin/MSVC  --prefix=/cygdrive/c/DEVTOOL/libs/icu-debug-static-win32-msvc2012  --with-data-packaging=static --enable-static --disable-shared --enable-debug --disable-release


참고로 dynamic 빌드(DLL생성) 일 때에는


shared debug


 bash runConfigureICU  Cygwin/MSVC  --prefix=/cygdrive/c/DEVTOOL/libs/icu-debug-shared-win32-msvc2012 --with-data-packaging=static --enable-shared --disable-static --enable-debug --disable-release


shared release


> bash runConfigureICU  Cygwin/MSVC  --prefix=/cygdrive/c/DEVTOOL/libs/icu-release-shared-win32-msvc2012 --with-data-packaging=static --enable-shared  --disable-static --disable-debug --enable-release




그리고 나서  아래 메시지 처럼 설정 완료 표시가 나오면 .


ICU for C/C++ 51.1 is ready to be built.

=== Important Notes: ===

Data Packaging: static

 This means: ICU data will be stored in a static library.

 To locate data: ICU will use the linked data library. If linked with the stub l

ibrary located in stubdata/, the application can use udata_setCommonData() or se

t a data path to override.

Building ICU: Use a GNU make such as make to build ICU.

checking the version of "make"... 3.82.90 (we wanted at least 3.80)

ok


'make' 실행하여 빌드 진행한다.  빌드 후 에는 'make check' 실행하여 정상빌드 여부 확인한다.


> make

> make check


테스트 완료 결과 



잘 끝났으면 설치한다.

> make install











 그동안 QTSDK를 이용한 개발은 해왔지만.   QT Installer 는 사용하지 않았었는데.


최근 프로젝트에서 사용해보려고  QT Installer 최신버전인 1.3을 설치했는데.....



  영 제대로 동작하지 않는다.


    package Component 스크립트중에 isDefault()라는 함수가있는데... "return true"를 해주면 해당 컴포넌트는 기본적으로 설치를 한다는 의미이다.


  그런데... 제대로 동작이 안된다.  


   그래서  installer 소스를 내려 받아 직접 빌드를 하고 나니... 동작된다... 이런...ㅡㅡ;


http://qt-project.org/wiki/Qt-Installer-Framework  

 

  그런데 문제가 여전히 있다.. 무엇인고 하니  직접 빌드한것은 DLL버전이라는점...  설치프로그램은 하나의 파일로 되어있어야 하는데.. DLL 링크 버전이라니...  


 이를 해결하려고 하면 QT를 static build 부터 해야 한다...    쩝.



외제(?)  라이브러리 갖다 쓸때는 특히나... 항상 한글문제가  있다. 


오늘은 log4cplus 다.


한글인코딩 utf16으로 해서 내보냈더니.. 뻗어버리는 증세 발견 


방법은 간다.


아래 처럼 처리하면 파일에 한글이 잘 저장된다...  단,MS Windows  환경에서 임.


std::string locale_string = text.toLocal8Bit().constData();

LOG4CPLUS_DEBUG(_logger,locale_string.c_str() );



만일 UTF-8로 출력을 내보낼 필요가 있는 경우에는 


std::string utf8_text = text.toUtf8().constData();


이렇게...  

위에서 변수 text   는 QString 인스턴스 이다.


V8 Javascript 엔진을 이용해서 이전 프로젝트에서도 진행했었는데.. 그때는 한글문제가 없었나..?



어째든 이번에도 막바지에 이르러 한글 출력 문제 해결한 내용을 정리해두기로 한다.


여기 메소드의 예는  javascript 에서  실행도중 debug 메시지 출력을 위해서  debugOut()라는 네이티브 함수를 호출하게 되는데 이때 한글을 전달한 경우 C++ 코드에서 이른 정상적으로 디코딩 하기 위한 방법이다. 


개발 상황은 다음과 같다.



1. QtSDK 4.8.4  with MS Visual Studio 2010  환경이다. 

2. V8 엔진에서  컴파일해서 실행할 javascript 파일은 UTF-8로 인코딩 되어있다.

3. Javascript 에서  Native c++ 에서 만든  debugOut()라는 함수를 호출하는 상황.




한글 처리 방법


1.  우선 Javascript 소스파일을 읽어드릴때  UTF-8 디코딩이 잘되어야 겠다.


2.  c++코드에서는  자바스크립트로 부터 호출되어 넘겨받은 UTF-8 문자열을  WString 으로 변환해야 한다. 


3.  그리고 WString을 (char *)형으로 변환하고 다시  QString으로 변환(QString::fromUtf16)하여 넣는다.


코드로 정리하면 아래와 같다.



static v8::Handle<v8::Value> debugOut(const v8::Arguments& args){

...

v8::String::Utf8Value msg(args[0]);


std::wstring_convert<std::codecvt_utf8<wchar_t>> utf8ToWString;

auto wstr = utf8ToWString.from_bytes(*msg);


qDebug() << QString::fromUtf16((const ushort *)wstr.c_str());


return v8::Undefined();

}



결과적으로 보면 별거없는데 이러한 제대로된 변환순서를 찾는 삽질을 할때는  ....








 

  웹에서 엑셀시트 같은 느낌의 GRID를 사용한는데는 jQuery와 jqGrid 조합이 최적인듯. 

 

jqGrid는 생성하는 방법은 2단계 이다.


 

1단계

   웹페이지에 그리드를 생성하려면, 먼저 그리드 생성을 원하는 위치에

                                                         <Table id="그리드id"></Table> 를 삽입한다.



2단계 

   테이블에 부여한  그리드id를 jQuery Object로 찾아 jqGrid(options) 함수를 실행한다.

 

아래 정리그림 참고. 

 

 

 

  실제 그리드를 렌더링하도록 하는 .jqGrid(options) 함수에서 options는 그리드의 각 컬럼에 대한 설정정보를 지정한다.


3단계  데이터 채우기

 - 데이터를 채우는 방법에는 서버로부터 XML ,JSON 형태로 GET URL 방식으로 내려받아 채울 수 도 있지만,



하이브리드 어플리케이션에 적용하는 경우에는


datatype : 'clientSide' 로 하고  addRowData 함수로 런타임에 데이터를 (비동기로) 채워주는 방식으로 한다.


jQuery("#grid_id").addRowData( rowid, data, position, srcrowid );  


위함수의 파라메터에 대한 설명은

rowid : 해당 ROW에 대한 고유 ID , 추후 데이터 변경, 삭제 등에 사용

data :  실제 그리드에 보여질 데이터  { key1:data1, key2:data2 } 형태가 됨

position : 데이터가 삽입될 위치 ,  "first","last","before","after" 가 사용될 수 있음

srcrowid :  앞서 position 파라메터 값이  before,after일 경우 기준위치의  row 의 id 값


실사용예


jQuery("#first_grid").addRowData( 1, { name:"나길동", no : 1,  telno : "010-1010-2020"});

위 예에서는 position, srcrowid 값이 없기 때문에 순차적으로 위에서 부터 추가 된다.





다양하게 데이터를 내려 받아 채우는 방법에 대한 정리 링크 참고

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data





options에 대한 property 설명 링크

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options



참고 sample 링크

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:first_grid





 

v8 빌드 방식이 바뀌어서 이전에 Scons 을 쓰는 것은 deprecated 되었다.

 

GYP 빌드 메타 정보를 생성하는 방법을 사용하는데 윈도우 & MSVC 2010 환경에서 빌드 하는 방법을 정리한다.

 

 

아래 순서로 빌드하면됨

 

1. 소스 다운로드

svn checkout http://v8.googlecode.com/svn/trunk/ v8

2. gyp 다운로드 (v8 빌드를 위한 메타 정보라고 함)

svn co http://gyp.googlecode.com/svn/trunk build/gyp

3. chromium python 다운로드 후 설치

svn co http://src.chromium.org/svn/trunk/tools/third_party/python_26@89111 third_party/python_26

4. chromium 제공  cygwin 설치

svn co  http://src.chromium.org/svn/trunk/deps/third_party/cygwin@66844 third_party/cygwin

5. visual studio 용 sln 파일 만들기

third_party\python_26\python.exe build\gyp_v8 -G msvs_version=2010

Updating projects from gyp files...

만들어진 all.sln 파일을 열고 msvc 에서 빌드 하는데... 아마도  code page 에러 (C4819 warning)가 발생할 것이다.

warning 중간에 나오는 error들도  warning 다량발생을 인한 2차적인 에러이므로 c4819만 잡으면 된다.

===================== 발생 에러 =======================

v8\src\utils.h : error C2220: warning treated as error - no 'object' file generated

v8\src\utils.h : warning C4819: The file contains a character that cannot be represented in the current code page (949). Save the file in Unicode format to prevent data loss

===============================================================

조치 하는 방법은  해당 솔루션에 포함된 프로젝트들(아래그림 참고) 중  소스를 포함하는 프로젝트들을 선택하여 C4819 Warning 이 안 뜨도록 억제해주면 된다.

파란색으로 선택된 프로젝트들만 선택하고 12개 프로젝트 선택하고 속성 창을 띄운다.

선택한뒤  Properties (속성) 창을 띄운다.

그리고 Disable Specific Warnings 에 4819를 추가해줍니다. (아래그림참고)

그리고 나서 빌드 하면 잘됨..

+ Recent posts