티스토리 뷰
하나의 C/C++프로그램으로 리눅스 뿐만아니라 맥과 윈도우에서도 구동하는 크로스 플랫폼 응용을 개발하려는 경우 많은 경우 검토 대상으로 등장하는 것이 자바 RCP와 같은 자바 기반 응용이나 GTK+, QT 기반의 응용 인데 이번에는 QT 기반의 C/C++ 응용을 윈도우에서 빌드하는 과정을 통해서 QT 응용의 윈도우 포팅을 위한 성공 사례를 확인할까 합니다.
이번 포스팅의 목표가 되는 프로젝트는 BibleTime이란 프로젝트로 잡았습니다. 리눅스에서 빌드한다면 yum이나 apt-get으로 연관 패키지를 간편하게 설치하여 손쉽게 빌드하겠지만 윈도우 빌드이니 만큼 빌드 환경을 갖추는 것이 그리 녹록하지는 않습니다. 그렇지만 일단 개발 환경이 갖추어지면 그 다음 부터는 응용 개발에 집중할 수 있으니 개발 환경 구축이 큰 부담이라고 할 수는 없을 것 같습니다. 윈도우 포팅 과정을 그래도 어렵지 않게 할 수 있는 것은 CMake라는 도구 덕택이 아닌가 싶습니다.
- 작업 폴더 생성
C:\bt
연관 패키지와 소스를 빌드할 루트 폴더입니다.
- Microsoft Visual Studio Express 2012 for Windows Desktop 설치
VS2012가 Windows7 이상에서만 수행되므로 XP이하 사양에서는 작업 불가입니다.
https://www.microsoft.com/ko-kr/download/details.aspx?id=34673
VS2012_WDX_KOR.iso 를 가상 CD로 마운트해서 설치를 진행 합니다.(wdexpress_full.exe을 실행합니다)
배포 버전은 Update5 버전으로 "개인-공중배포 목적"으로 온라인등록하여 제품코드 받아 등록 합니다.
- Visual C++ 2012 Redistributable Package 설치
https://www.microsoft.com/ko-kr/download/confirmation.aspx?id=30679
C:\bt\vcredist_x86.exe에 복사
- ISO C9x compliant 헤더 파일 설치
https://code.google.com/archive/p/msinttypes/downloads
msinttypes-r26.zip 압축을 풀어서 inttypes.h를 VS2012 설치 폴더 Microsoft Visual Studio 11.0\VC\include 에 복사
- CMake 설치
cmake-3.6.1-win32-x86.msi "Add CMake to the system PATH for all users" 선택으로 설치
(이전버전이 있다면 삭제하고 설치해야 합니다)
- Qt for Visual Studio 2012 설치
(다운로드시 오픈소스 및 GPL3 라이선스에 동의해야함)
qt-windows-opensource-5.2.0-msvc2012-x86-offline.exe 설치후 QT Creater등을 실행할 필요는 없습니다.
- NSIS 설치
https://sourceforge.net/projects/nsis/files/NSIS%202/2.51/nsis-2.51-setup.exe/download
nsis-2.51-setup.exe 를 설치합니다. 설치 프로그램을 생성해주는 오픈소스 프로그램입니다.
- Git 및 7zip 설치
소스 체크 아웃 및 설치 프로그램 생성시 사용할 압축 프로그램으로 설치는 아래 링크를 참조하세요.
"기업에서도 사용할 수 있는 압축 프로그램 7-Zip"
- pkg-config 설치
pkg-config-lite-0.28-1_bin-win32.zip을 C:\bt\pkg-config-lite-0.28-1에 압축 해제
제어판>시스템>고급시스템설정>환경변수에서
PATH에 C:\bt\pkg-config-lite-0.28-1\bin추가
PKG_CONFIG_PATH를 C:\bt 로 추가
- zlib 빌드
소스 다운로드 : http://zlib.net/zlib128.zip
C:\bt\zlib에 압축해제
CMake(cmake-gui) 실행
Source/Build 디렉토리를 C:\bt\zlib 로 설정
Configure>Visual Studio 11 2012 선택후 [Finish] 작업 종료까지 대기
Configure 를 눌러 환경 설정을 새로 고침
Generate 클릭하여 솔루션 생성
Visual Studio 2012에서 c:\bt\zlib\zlib.sln 열기
zlibstatic > 속성에서
구성을 모든구성으로 선택
구성 속성>일반>프로젝트 기본값 섹션의 문자 집합을 유니코드 문자집합 사용으로 선택으로 적용 및 확인
툴바>솔루션구성>Release로 선택후 zlibstatic 컨텍스트메뉴>빌드 수행 (C:\bt\zlib\Release\zlibstatic.lib 생성됨)
파일>솔루션 닫기
- Curl 빌드하기
소스 다운로드 : https://curl.haxx.se/download/curl-7.50.1.zip
C:\bt\curl 에 압축해제
CMake(cmake-gui) 실행
Source/Build 디렉토리를 C:\bt\curl 로 설정
Configure>Visual Studio 11 2012 선택후 [Finish] 작업 종료까지 대기(오류메시지 무시)
BUILD_CURL_EXE, BUILD_CURL_TESTS 옵션의 체크 박스 해제
Configure 를 눌러 설정을 새로 고침
Generate 클릭하여 솔루션 생성
Visual Studio 2012에서 c:/bt/curl/CURL.sln 열기
libcurl>속성>구성속성>일반에서
프로젝트 기본값 섹션의 문자 집합을 유니코드 문자집합 사용으로 선택으로 적용 및 확인
툴바>솔루션구성>Release로 선택후 libcurl 컨텍스트메뉴>빌드 수행(경고 무시)
파일>솔루션 닫기
- ICU 빌드하기
소스 다운로드 : http://download.icu-project.org/files/icu4c/51.2/icu4c-51_2-src.zip
(Qt에서도 ICU를 배포하는데 버전이 같지 않으면 용량큰 ICU 라이브러리를 이중으로 배포해야 합니다)
C:\bt\icu 에 압축해제
Visual Studio 2012에서 C:\bt\icu\source\allinone\allinone.sln 열기(버전차이 경고시 업그레이드 수행)
툴바>솔루션구성>Release로 선택후 솔루션 컨텍스트메뉴>빌드 수행(경고 무시)
파일>솔루션 닫기
- BZIP2 빌드하기
소스 다운로드 : http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
C:\bt\bzip2 에 압축해제
Visual Studio 2010 Pro에서 C:\bt\bzip2\libbz2.dsp 파일 열기로 시스템 업그레이드
Visual Studio 2012를 열고 C:\bt\bzip2\libbz2.sln 열기(버전차이 경고시 업그레이드 수행)
툴바>솔루션구성>Release로 선택후 솔루션 컨텍스트메뉴>빌드 수행(경고 무시)
파일>솔루션 닫기
- liblzma 설치
다운로드 : http://tukaani.org/xz/xz-5.2.1-windows.zip
C:\bt\xz 에 압축해제(Pre-built 버전으로 소스 빌드는 없습니다)
비주얼스튜디오 콘솔에서("비주얼스튜디오용 콘솔 만들기" 참조)
cd C:\bt\xz
lib /def:doc/liblzma.def /out:bin_i686/liblzma.lib /machine:x86
- boost 다운로드
다운로드 : https://sourceforge.net/projects/boost/files/boost/1.61.0/boost_1_61_0.zip/download
C:\bt\boost 에 압축해제. 대표적인 C++ 라이브러리로 Clucene빌드 과정에 참조합니다.
- Clucene 빌드하기
C:\bt\clucene-core에 압축해제
CMake(cmake-gui) 실행
Source/Build 디렉토리를 C:\bt\clucene-core 로 설정
Entry 항목을 확인해서 아래와 같이 설정 및 추가(상단의 Grouped 및 Advanced 옵션 체크후 작업)
ZLIB_INCLUDE_DIR:PATH=C:\bt\zlib
ZLIB_LIBRARY:FILEPATH=C:\bt\zlib\Release\zlibstatic.lib
Boost_DIR:PATH=C:\bt\boost
Boost_INCLUDE_DIR:PATH=C:\bt\boost\boost
Configure>Visual Studio 11 2012 선택후 [Finish] 작업 종료까지 대기(경고 무시)
Configure 를 눌러 설정을 새로 고침
Generate 클릭하여 솔루션 생성(경고 무시)
Visual Studio 2012에서 c:\bt\clucene-core\clucene.sln 열기
툴바>솔루션구성>Release로 선택후 ALL_BUILD 컨텍스트메뉴>빌드 수행(경고 무시)
파일>솔루션 닫기
- libsword 빌드하기
소스 다운로드 : ftp://ftp.crosswire.org/pub/sword/source/v1.7/sword-1.7.4.tar.gz
C:\bt\sword 에 압축해제
Visual Studio 2012에서 C:\bt\sword\lib\vcppmake\libsword.sln을 열고
속성>C/C++>일반 icu의 include폴더를 icu-sword -> icu로 변경
속성>C/C++>일반 icu의 include폴더를 icu-sword -> icu로 변경,
curl의 라이브러리 경로(curl\lib\Release) 변경, libcurl_a.lib->libcurl_imp.lib
툴바>솔루션구성>Release로 선택후 빌드하면 C:\bt\sword\lib\vcppmake\Release에 libsword.lib, *.dll 생성
Visual Studio 2012에서 C:\bt\sword\utilities\vcppmake\utilities.sln 열기
아래 과정이 개별 프로젝트에 대해서 모두 적용되어야 하므로 전체 선택후 작업
속성>C/C++>일반 icu의 include폴더를 icu-sword -> icu로 변경
속성>C/C++>일반 icu의 include폴더를 icu-sword -> icu로 변경,
curl의 라이브러리 경로(curl\lib\Release) 변경, libcurl_a.lib->libcurl_imp.lib
툴바>솔루션구성>Release로 선택후 빌드
- BibleTime 빌드
소스 체크 아웃 : git clone https://github.com/bibletime/bibletime.git
C:\bt\bibletime 에 깃 복제하기를 수행하고 갈아타기/체크아웃으로 branch 2.10.1로 변경(최종 릴리즈 버전)
libsword에 대한 패키지 정보 파일 생성 : C:\bt\sword.pc을 생성하여 아래의 내용을 저장합니다.
prefix=C:/bt
exec_prefix=${prefix}
libdir=${prefix}/sword/lib/vcppmake/Release
includedir=${prefix}/sword/include
curllib=${prefix}/curl/lib/Release/libcurl_imp
zliblib=${prefix}/zlib/Release/zlibstatic
Name: SWORD
Description: Biblical Text Research Engine!
Version: 1.7.4
Libs: ${libdir}/libsword.lib ${curllib}.lib ${zliblib}.lib
Libs.private: -L${libdir} -L${curllib}
Cflags: -I${includedir}
CMake(cmake-gui) 실행
Source 디렉토리를 C:\bt\bibletime 로 설정
Build 디렉토리를 C:\bt\bibletime-release 로 설정
Configure>Visual Studio 11 2012 선택후 [Finish] 작업 종료까지 대기(디렉토리 생성에 Yes, 오류메시지 무시)
Entry 항목을 확인해서 아래와 같이 설정 및 추가(상단의 Grouped 및 Advanced 옵션 체크후 작업)
CMAKE_BUILD_TYPE : Release
CMAKE_INSTALL_PREFIX : C:\bt\bibletime-release\install
CMAKE_PREFIX_PATH:PATH=F:\Qt\Qt5.2.0\5.2.0\msvc2012
MSVC_REDIST : c:\bt\vcredist_x86.exe
CLucene_INCLUDE_DIR:PATH=C:/bt/clucene-core/src/core
CLucene_LIBRARY:FILEPATH=C:/bt/clucene-core/bin/Release/clucene-core.lib
CLucene_SHARED_LIB:FILEPATH=C:/bt/clucene-core/bin/Release/clucene-shared.lib
CLucene_LIBRARY_DIR:PATH=C:/bt/clucene-core/src/shared
CURL_INCLUDE_DIR:PATH=C:/bt/curl/include
CURL_LIBRARY:FILEPATH=C:/bt/curl/lib/Release/libcurl_imp.lib
CURL_CONFIG:FILEPATH=C:/bt/curl/lib/curl_config.h
ZLIB_INCLUDE_DIR:PATH=C:/bt/zlib
ZLIB_LIBRARY:FILEPATH=C:/bt/zlib/Release/zlibstatic.lib
Configure 를 눌러 설정을 새로 고침. 위의 그림은 설정을 반영한 이후의 화면입니다.
Generate 클릭하여 솔루션 생성
Visual Studio 2012에서 C:\bt\bibletime-release\bibletime.sln 열기
툴바>솔루션구성>Release로 선택후 ALL_BUILD 컨텍스트메뉴>빌드 수행(경고 무시)
INSTALL 컨텍스트메뉴>빌드를 수행하면 C:\bt\bibletime-release\install\bin 폴더에 실행을 위한 환경이 준비됩니다.
정상적인 실행을 위해서는 C:\bt\sword\lib\vcppmake\Release\libsword.dll를 C:\bt\bibletime-release\install\bin에 복사해 주어야 합니다.
PACKAGE 컨텍스트메뉴>빌드 수행하면 아래의 그림과 같이 배포를 위한 설치 파일이 생성됩니다.
*.nsi 파일은 앞서 설치한 NSIS가 설치 파일 제작을 위해 참조하는 스크립트로 이 또한 자동적으로 생성됩니다. 오픈 소스 프로젝트를 통해서 얻는 노하우가 많습니다. 최종 결과물인 bibletime-2.1.10.1-win32.exe를 배포하면 됩니다.
'프로그래밍' 카테고리의 다른 글
ASP.NET Web Forms 시작하기 (0) | 2016.09.06 |
---|---|
VS2012로 XP에서도 수행되는 프로그램 빌드하기 (0) | 2016.09.01 |
비주얼스튜디오용 콘솔 만들기 (0) | 2016.08.18 |
C#에서 다중 모니터 사용하기 (0) | 2016.08.05 |
서로 다른 클래스의 메소드를 이름으로 호출하기 (0) | 2016.08.04 |