페이지

Include Lists

2017년 3월 13일 월요일

NuGet Native C++ Package Create


 What
   - Native C++ Package 생성 방법 파악

 Why
   - Package 가 무엇인지, 어떻게 생성할 수 있는지에 대한 파악  



[먼저 이야기를 하면, 대부분의 예제는 .Net 기반의 예제로 구성되어 있다아래의 방법은 C++ Native Package 만들기 위한 방법임을 먼저 알린다.]

먼저 package 무엇일까??
앞에 소개에서 간단하게 설명한것 처럼, package 프로젝트의 정보를 가지고 있는 binary 파일이라고 있다.
프로젝트의 설정, 소스코드 등등 하나의 솔루션을 코드없이 만들어 있는데 필요한 모든 정보를 가진것을 말한다.

앞의 boost라이브러리를 Install , 현재 나의 설정에는 아무런 변화가 없이, package.config라는 파일만 생성이 되었고Import project라는 항목이 추가 되었는데, 라이브러리 링크 include 경로가 모두 설정이 되어 있었다.

패키지 파일을 만들 , 어떤 특정 저장소에 src코드 + 라이브러리 파일을 올려놓고 다운 받는 것이 아니라오롯이 패키지 파일 하나만 다운 받아 파일을 설정에 맞게 빌드하여 필요한 파일들이내 환경이 import 되어 사용이 된다

그렇기 때문에 install-uninstall 하여도 설정에 영향을 주는것이 아니기 때문에, 깨끗한 빌드 환경을
유지 있으므로 쓰는 사람도 아주 편하다.



패키지 파일 = 프로젝트 파일 이라는 가정을 있다. 이렇게 생각하는것이 전반적인 과정을 이해하는데 도움이 된다.



C++ native package 만드는 과정은 아래와 같이 정리할 있다.


  1. Tool 설치
  2. 솔루션 생성
  3. NuGet.org 에서 개발자 key 부여 받기
  4. Package 파일 만들기
  5. 배포
  6. 확인



1. Tool 설치
Package 만들기 위해서는 아래의 Tool 들을 설치한다.

[필수] NuGet Manager Add-in
[필수] PowerShell 3.0
   Windows 8 - Installed by default
   Windows 7 or Windows Vista - Install from http://www.microsoft.com/en-us/download/details.aspx?id=34595

[필수] NuGet 2.5 or later

   2.5 Release : https://nuget.codeplex.com/releases
   Install the Visual Studio Integration component (VSIX)

[필수] CoApp PowerShell Tools (정확히 필요한지는 모르겠음.. 설치도 제대로 이루어 지지 않음.)

    Stable 'beta' release : /files/CoApp.Tools.Powershell.msi

[옵션] NuGetCommandLine
(이게 없으면, nuget.exe파일에 대한 명시적 실행 파일 실행 경로를 설정해 줘야함..)

2. 솔루션 준비

 Package 생성 솔루션을 만든다.


1 #pragma once
2
3 #include <iostream>
4 #include <stdio.h>
5
6 class SampleNativePackageApp
7 {
8 public:
9     void ShowMessage() { std::cout << "SampleNativePackage Version 1" << std::endl; }
10};



3. Nuget.org ApiKey 받기
패키지 파일을 배포하기 위해서는 Api 키가 필요하다. 
https://www.nuget.org/ 에 가입 후 

자신의 계정으로 들어간다.

그림과 같이 ApiKeys 항목에서 발급이 가능하다.


4. Package 파일 만들기(Create Package)
- 먼저 패키지를 만들기 위해서는 package에 대한 설명과 프로젝트의 설정 정보가 필요하다. 이를 포함하는것이 .autopkg 라는 파일이다. 

누겟 홈페이지에 가면, .nuspec 이라는 파일을 만들어야 한다고 한다. 그런데 아래의 문장을 보면,

.nuspec 파일은 .Net 기반의 파일을 의미한다고 추정한다.( autopkg 파일 역시 비슷한 파일이므로…)

어쨌든, c++에서 package를 만들기 위해서는 .autopkg 파일을 만들어 보자.

형식은 아래와 같으며 항목에 맞게   정리  주자.
모든 과정을 설명할  없기 때문에자세한 내용은 생략하고  역시도 coApp-Packages라는 script 문법이 있는것 같다.
이를 참조하면 좋을  같다http://coapp.org/developers/packagingbestpractices.html#autopkg

nuget {
   nuspec {
      id = HelloWorldNuGetTemplate;
      version : 0.0.0.1;
      title: HelloWorldNuGetTemplate Lib By Devman;
      authors: {Devman};
      owners: {Devman};
      requireLicenseAcceptance:false;
      summary:Template NuGet Native Package;
      description: @"This is a Devman";
      releaseNotes: "Last Release";
      copyright: Copyright (c) 2017 DevMan Corporation. All rights reserved.;
      tags: { sample, native, c++ };
   };

   files {
      include: { NuGetTemplate.h };

      // The release here works for any config that contains release
      // Examples : Release ENU,  RELEASE-ENU,  Release DEU
      [release] {
         lib:     { Release\*.lib; }
      };

      // The debug here works for any config that contains debug
      // Examples : Debug ENU,  DEBUG-ENU,  Debug DEU
      [debug] {
         lib:     { Debug\*.lib;  }
 symbols: { Debug\*.pdb; }
      };
   };
}

** 주의 사항으로, Id/version은 반드시 수정하도록 하자. 특히 id 경우 샘플이름으로 사용할 경우, upload시 중복된 이름의 package fail 이 발생하기 때문이다. **

HelloWorldNuGetTemplate.autopkg 라는 파일을 생성하고, 이를 솔루션 파일과 동일한 위치에 두자.

Tools > NuGet Package Manager > Package Manager Console 실행한다.

아래와 같은 실행 화면이 나오면 Write-NuGetPacakage *.autopkg 입력한다.















*.nupkg 파일이 성공적으로 생성된것을 확인 있다.
( 그림에서 nupkg 파일이 두개 생성되었는데, 이는 autopkg 파일에 빌드 옵션 때문에 그런것이다. 1개만 생성되면 된다.)













위와 같은 방법으로 패키지 파일을 생성할 수 있다.

다음번에는 배포(Publish) 하는 방법에 대해서 알아 보겠다.


참고
- http://blog.naver.com/PostView.nhn?blogId=drvoss&logNo=20207977957
- http://debop.blogspot.kr/2012/03/nuget.html
- https://blogs.techsmith.com/inside-techsmith/nuget-packages-3/
- http://www.codeguru.com/csharp/article.php/c19247/Creating-Your-Own-NuGet-Package.htm
- https://blogs.msdn.microsoft.com/vcblog/2013/06/18/deep-dive-into-nuget-native-part-one/
- http://coapp.org/tutorials/building-a-package.html

댓글 없음:

댓글 쓰기