GitHub: https://github.com/Microsoft/vcpkg  

demo 영상: https://www.youtube.com/watch?v=y41WFKbQFTw

 

Visual C++에서 OSS의 라이브러리를 사용하기 위한 패키지 매니저.

 

인스톨 순서는 다음과 같다.

1. https://github.com/Microsoft/vcpkg.git 을 복제.

2. 복제한 디렉토리에서 powershell-exec bypass scripts\bootstrap.ps1 를 실행하여 빌드 한다.

3.  .\vcpkg integrate install 로 사용자 전체에 설치(첫 회는 관리자 권한 필요).

4. 패키지 설치는 아래처럼 한다
..\vcpkg install sdl2 curl

 

 

 

작업 예와 대응 패키지에 대해서:

https://github.com/Microsoft/vcpkg/blob/master/docs/EXAMPLES.md

 

MIT 라이선스.

 

 

출처: https://opcdiary.net/?p=32935

저작자 표시
신고
by 흥배 2016.09.30 08:00

유니버설 C런타임 라이브러리에 대해서

Visual C++2015에서는 C런타임(CRT) 라이브러리가 크게 리팩터링 되어서 Universal CRT(UCRT)와 그 이외의 런타임(vcruntime140.dll ) 2종류로 구성되어 있다.

 

UCRT에는 널리 이용되는 표준적인 C 런타임 라이브러리 코드가 구현 되어 있으며 안정된 API를 갖추고 있기 때문에 Visual Studio의 릴리스마다 버전 변경할 필요가 없는 Windows OS의 컴포넌트의 일부로서 자리 매김 되어 있다.

 

UCRT Windows 10에는 기본으로 설치되어 있지만 이전 OS에 대해서는 Visual C++2015 재 배포 가능 패키지를 사용하여 설치할 수 있다.

UCRT에 대해서는 아래의 블로그 글을 참조.

Introducing the Universal CRT

https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/  

 

애플리케이션 개발과 배포 시에 상기의 변경에 대해서 의식할 필요는 거의 없으나 CRT 배포 방법으로 "로컬 배치"를 검토하고 있는 경우에는 UCRT의 로컬 배치에 관하여 주의할 필요가 있다.

 

 

Visual C++2015에서 CRT 로컬 배치에 대해서

애플리케이션의 실행에 필요한 C 런타임 라이브러리를 실행 환경에 배포하는 방법으로는 재 배포 가능 패키지 등을 사용하여 시스템 폴더에 런타임을 설치하는 방법이 일반적이며, 이와 같이 시스템 폴더에 런타임을 설치하는 것을 "집중 배치"라 부른다.

 

이에 대한 시스템 요건 등에 의한 집중 배치를 채용하기 어려운 경우는 애플리케이션 배포 처 폴더에 런타임을 배치할 수 있으며 이러한 배치 방법은 "로컬 배치"라 부른다.

 

집중 배치와 로컬 배치에 대한 자세한 내용은 아래의 문서를 참조.

 

배치 방법 선택

https://msdn.microsoft.com/ja-jp/library/ms235316.aspx

 

로컬 배치할 때 Windows 10보다 이전의 OS에서는 전술의 UCRT도 실행 환경에 배치할 필요가 있다는 것에 유의하자. 구체적으로는 Visual Studio 2015를 설치한 환경에서 아래의 폴더에 있는 DLL을 모두 exe와 같은 폴더에 배치할 필요가 있다.

 

<UCRT 배포 원 폴더: 64 bit OS Visual Studio 2015를 설치하고 있는 경우>

(64 bit응용 프로그램용)C:\Program Files(x86)\Windows Kits\10\Redist\ucrt\DLLs\x64

(32 bit응용 프로그램용)C:\Program Files(x86)\Windows Kits\10\Redist\ucrt\DLLs\x86

 

또한 UCRT 이외의 CRT는 기존대로 redist 폴더 아래에 저장되어 있다.

 

<CRT 배포 원 폴더: 64 bit OS Visual Studio 2015를 설치하고 있는 경우>

(64 bit응용 프로그램용)C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\redist\x64

(32 bit응용 프로그램용)C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\redist\x86

 

 

Visual C++2015 응용 프로그램에서 C 런타임 라이브러리를 로컬 배치할 필요가 있는 경우에는 위 내용에 대해서 유의하자.

 

 

 

 

 

출처: https://blogs.msdn.microsoft.com/jpvsblog/2016/08/04/ucrt_local_deployment/

 

 

 

저작자 표시
신고
by 흥배 2016.09.20 08:00

회사에서 빌드 머신을 만들 때 개발 중인 프로그램을 빌드를 하기 위해 하는 것에 비해 덩치가 큰 비주얼스튜디오를 설치해야 한다.

코딩을 한다면 비주얼스튜디오를 설치하는 것은 괜찮지만 그냥 문제 없는 코드를 빌드만 하는데 덩치 큰 비주얼스튜디오를 설치해야 하고, 이것 때문에 비주얼스튜디오 라이선스를 하나 소비해야 한다.

 

이런 문제를 해결하기 위해서 얼마 전에 VC 프로젝트를 빌드만 할 수 있는 툴을 MS에서 제공했다.

 

특징은 다음과 같다.

Visual C++ Compilers (targeting x86, X64 and ARM)

Visual C++ headers & libraries (CRT & STL)

Visual C++ build scripts (targeting Windows desktop)

Microsoft Build Tools 2015 (MSBuild)

Windows SDK 8.1 (optional, on by default)

Windows SDK 10 (optional, off by default)

ATL and MFC (optional, off by default)

C++ Build tools specific command prompts

 

더 자세한 설명은 VC 블로그를 보기 바란다

https://blogs.msdn.microsoft.com/vcblog/2016/03/31/announcing-the-official-release-of-the-visual-c-build-tools-2015/

 

다운로드는 http://go.microsoft.com/fwlink/?LinkId=691126

 

저작자 표시
신고
by 흥배 2016.05.02 08:00
C++, NeXT, vc, WTL

원칙적으로 GUI 프로그래밍은 C#을 사용하여 만드는 것이 좋다고 생각한다

그러나 상황에 따라서 C++ GUI 프로그래밍을 해야 하거나 하는 것이 더 좋을 때도 있다.

이럴 때는 WTL을 사용하는 것을 추천한다.

 

WTL과 관련된 자료는 적지만 강좌 글이나 CodeProject에 있는 사용 사례를 보면 배우기 어렵지는 않다(아 기본 전제로 Win32 API 프로그래밍을 좀 알아야 한다)

 

그리고 템플릿 프로그래밍을 어떻게 사용하는지 알고 싶을 때 WTL 코드를 보는 것도 추천한다.

 

 

 

 

 

 

 

source: https://github.com/seokmin/SoraeMi-in-WTL/

 

 

 

 

 

 

저작자 표시
신고
by 흥배 2016.04.07 08:19
C++, vc, vc++

- 헤더 의존을 줄인다. 자주 변할 수 있는 코드는 헤더에 쓰지 않는다.

 

- 모듈화 하여 의존을 줄이거나 모듈을 dll화 하여 링크 시간을 단축하다(단 너무 나누는 것은 주의).

모듈별로 프로젝트를 분할하면 자연스럽게 의존이 없어지고 그 결과 프로그램 변경 시 빌드 시간 단축도 생긴다.

또 정적 링크(staticLib)에서 동적 링크(dll)로 바꾸는 것으로 링크 시간이 줄어진다.

 

- 프리 컴파일 된 헤더 / 병렬 빌드를 적절히 설정한다.

 

- PC 성능 업그레이드

CPU 성능을 올린다.

메모리를 늘린다. 빌드 시 HDD 스왑이 줄면서 빌드(링크도?) 속도가 개선된다.

HDD → SSD로 바꾼다.

 

- 소스 코드가 너무 크고 복잡하다

프리 프로세스에 시간이 걸리거나 소스 코드가 복잡하면 빌드 시간에 영향을 주고, 빌드 후의 OBJ 파일 사이즈가 너무 크면 링크에 영향을 미친다.

 

- 복잡한 템플릿

STL 이나 boost를 사용한 것만으로 빌드 시간이 늘어났다고 느낀 경험이 있을 것이다.

프리 프로세스에서 행해지는 템플릿 해석은 빌드 시간에서 템플릿의 전개에 의한 코드 사이즈의 증가로 링크 시간에 지대한 영향을 끼치므로 템플릿은 용법 용량을 지키고 올바르게 사용해야 한다.

 

- 대량의 강제 inline

강제 inline도 비교적 위험. 처리 속도를 높이는 것만이 최적화라고 믿는 사람이 상당수 존재하므로 모든 함수를 강제 inline화 했는데 알고 보니 OBJ 사이즈가 커져서, 빌드 시간이나 링크 시간에 영향을 미쳤다. 최대한 inline화는 우리보다 몇 배 똑똑한 컴파일러에게 맡기도록 한다.

 

- 엄청나게 큰 static 영역이 잔뜩(그렇게 영향 없을지도?)

소스에 엄청나게 큰 static한 배열이 있으면 OBJ의 사이즈가 크게 된다. 강제 inline이나, 과격 한 templete 사용이 없는데도 왠지 링크 시간이 너무 많이 걸리는 경우는 static이 원인 일수도 있다.

 

 

 

출처: http://qiita.com/DandyMania/items/2c44481f03f4d08a24ea

 

저작자 표시
신고
by 흥배 2015.12.09 08:00
C++, vc, vc++

VC++을 사용할 때 링크 오류가 발생하여 시간을 허비하는 경우가 있다.

보통 아래의 이유로 링크 오류가 발생하는 경우가 많다.

 

- 문자 코드의 취급이 같지 않다.

Use Unicode Character Set, Use Multi-Byte Character Set

 

- [C/C++][Code generation][Runtime Library]의 취급이 같지 않다.

Release 모드| Debug 모드

정적 링크를 사용할 경우 Multi-threaded(/MT) | Multi-threaded Debug(/MTd)

DLL을 사용할 경우 Multi-threaded DLL(/MD) | Multi-threaded Debug DLL(/MDd)

 

- 링크 라이브러리의 디렉토리를 지정하지 않았다.

[VC++ Directories][library Directories]

 

- 링크하는 설정 lib 파일이 아직 준비되지 않았다.

Debug 모드 or Release 모드

문자 코드

MultiThread 취급

32bit Or 64bit

 

- 복사한 설정에서 잘못된 의존성·설정이 된 경우

 

- 설정에 다른 버전의 컴파일러가 사용 되었을 때

 

 

 

출처: http://qiita.com/nonbiri15/items/e8cffa47596f49023480

저작자 표시
신고
by 흥배 2015.11.27 08:00

cppjosa https://github.com/myevan/cppjosa

위 버전은 mac에서만 빌드 및 테스드 되었다고 해서 나는 Windows 에서 사용하는데 문제 없는지 테스트 해보았다.

대부분 문제가 없었지만 작은(?) 문제로 Windows에서는 컴파일 및 실행에 문제가 있어서 아주 조금 수정하였다.

https://github.com/jacking75/cppjosa

Visual StudioC++11 지원 등의 문제로 최신 버전인 2015를 사용하였다.

 

수정된 부분

1. 소스 파일의 인코딩 변경

원 버전은 UTF-8(Bom 없음)이지만 VS에서는 인코딩 문제로 컴파일 실패

'유니코드 - 코드페이지 1200'으로 변경

 

2. std::locale("ko_KR.UTF-8") 문제

Windows에는 "ko_KR.UTF-8"을 지원하지 않음

프리프로세스를 이용하여 윈도우 플랫폼에서 빌드할 때는 std::locale("Korean")을 사용하도록 변경

이 문제는 아래의 링크 글을 참고하기 바란다.

http://includes.egloos.com/v/1504676 , http://sjc333.egloos.com/3137637

 

 

Visual Studio 실행

WinTest 디렉토리의 WinTest.sln을 실행하면 된다.

 


ps: C# 버전도 있다. https://github.com/myevan/csjosa




원 개발자분이 제가 보낸 PR을 적용해서 VS 2013 지원까지 됩니다. 그러니 

https://github.com/myevan/cppjosa 

이것을 사용하는 것이 좋습니다^^

저작자 표시
신고
by 흥배 2015.10.08 08:00

오래 전부터 요구되었던 32비트 및 64비트 C++ 코드에서 동작하는 에디트 and 컨티뉴(EnC) 기능이 Microsoft에 의해서 구현되었다. VS2015 에서는 기본적으로 유효하다. VS2013에서는 32비트 코드용으로 기본적인 형식으로 지원되고 있었지만, 유효하게 하면 최신 기능을 모두 이용하지 못하는 상태였다. EnC에 의해 개발자는 디버거에서 실행 중인 프로그램의 코드를 편집 가능하게 된다. 프로그램의 실행을 재개하면 다시 컴파일을 하지 않아도 변경 결과를 확인할 수 있다.

 

이번 VS2015 에서는 진단 도구 창과 비동기 코드를 디버깅 하기 위한 확장 콜 스택 등, 다른 기능에 대한 액세스를 잃지 않는 EnC를 사용할 수 있다. 또한 개선점으로 64비트 코드에서도 에디트 and 컨티뉴를 사용 할 수 있게 되었다. 이는 VS2015의 새 기능이다.

 

새로 설치한 VS2015 RTM 상에서 작성한 신규 프로젝트에서는 기본 값으로 EnC가 유효하게 되어 있지만 경우에 따라서는 EnC를 사용를 할 수 없는 경우도 있다. 아래 항목이 설정 되어 있어야 EnC를 사용할 수 있다.

• 디버깅 정보의 포맷을 “Program Database for Edit and Continue(/Zi)"으로 설정해야 한다.

• 인크리멘탈 링크의 효율화에 “Yes(/INCREMENTAL)"를 설정해야 한다.

Debug->Option "Native Edit and Continue"를 유효하게 해야 한다.

첫 두 개의 항목은 프로젝트의 설정에서 적용한다. 세 번째 항은 Debug| Option 아래에 있다.

 

불행히도 제한이 남아 있어서 EnC가 기대대로 동작하지 않는 곳이 몇 가지 있다. VS2015 RTM 사용자에게 영향을 미칠 것도 있지만, 장래 VS2015의 업데이트로 대처할 예정이다. 먼저 꼽히는 것은 Windows 스토어용으로 컴파일된 바이너리가 EnC를 지원하지 않는 것이다. 마찬가지로 /DEBUG:FASTLINK로 컴파일 된 이진 파일도 지원하지 않는다. 최적화를 유효하게 한 컴파일된 바이너리에도 이와 같은 제한이 있다.

 

EnC를 사용하여 파일을 편집하는 경우 현행의 VC2015에서는 파일 편집 횟수가 제한되어 있다. 이것을 넘어서 편집 작업을 행했을 경우에는 예약 공간이 없음을 나타내는 오류 메시지가 표시된다. 이 예약 공간의 사이즈는 지금은 고정이지만 개발 팀은 이를 설정 가능하게 하여 보다 개발자 친화적으로 하는 것을 계획 중이다.

 

64비트 코드에서 EnC를 활용하려면 v140 도구 집합을 사용할 필요가 있다. 마찬가지로 32비트 코드로 EnC를 이용하는 경우는 v120 도구 세트가 대상이다.

 

 

출처http://www.infoq.com/jp/news/2015/08/enc-vs2015

 

 

저작자 표시
신고
by 흥배 2015.10.01 08:00

VC++ 14 에서는 이전과 다르게 유니버셜 CRT를 사용한다.

그래서 VC++ 14 이 설치되지 않은 곳에 VC++ 14로 만든 데스크탑 애플리케이션(정적 링크를 사용하지 않은)을 배포할 때 는 아래의 dll 이 배포할 애플리케이션과 같은 폴더에 있어야 한다.

 

1. uCRTDLL

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Remote Debugger 혹은

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Remote Debugger 에 있는 x64 혹은 x86dll

 

만약 디버그 버전으로 만든 애플리케이션이라면 ucrtbase.dll 대신에 ucrtbased.dll 이 필요.

ucrtbased.dll 파일은 System32 SysWOW64 폴더에 있다.

 

 

2. VC++ 14용 런타임

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist

폴더에서 배포할 애플리케이션에 필요한 dll

필요한 dll Dependency Walker로 찾으면 된다.

 

 


참고: http://dev.activebasic.com/egtra/2015/08/31/832/

 

저작자 표시
신고
by 흥배 2015.09.21 08:00

New C++ experimental feature: The tadpole operators - The Old New Thing - Site Home - MSDN Blogs(http://blogs.msdn.com/b/oldnewthing/archive/2015/05/25/10616865.aspx ) 의 글 일부 번역

 


나는 자주 이런 코드를 쓰고 있다

x = (y + 1) % 10;

x = (y + 1) * (z - 1);

x = (double)(f(y) + 1);

 

+연산자는 우선 순위가 아주 낮기 때문에 그 주변에 괄호를 사용한다. 그래서 읽기 불편한 깊게 중첩된 코드가 되어 버린다.

 

Visual Studio 2015 RC에는 실험적인 연산자가 2개 추가 되었다. 그 이름은 tadpole operators(올챙이 연산자). 

이것은 정수 값에서 괄호를 필요로 하지 않고 1을 가산, 감산 할 수 있는 연산자이다.

x = -~y % 10;

x = -~y * ~-z;

x = (double)-~f(y);

 

올챙이 연산자라고 이름이 붙여진 이유는 올챙이가 값을 향해서 헤엄치는 모습과 값에서 멀어지는 것이 헤엄치는 모습을 닮았기 때문이다

문법

의미

설명

-~y

y + 1

올챙이가 값을 향해서 헤엄치면 커진다

~-y

y - 1

올챙이가 값으로부터 멀어지게 헤엄치면 작아진다

 

 

이 실험적인 올챙이 연산자를 유효하게 하려면 C++ 파일의 제일 위에 다음과 같은 행을 추가해야 한다.

#define __ENABLE_EXPERIMENTAL_TADPOLE_OPERATORS

 

아래는 올챙이 연산자를 사용한 코드의 예이다.

 

#define __ENABLE_EXPERIMENTAL_TADPOLE_OPERATORS

#include <ios>

#include <iostream>

#include <istream>

 

int __cdecl main(int, char**)

{

   int n = 3;

   std::cout << "3 + 1 = " << -~n << std::endl;

   std::cout << "(3 - 1) * (3 + 1) " << ~-n * -~n << std::endl;

   return 0;

}

 

이 연산자는 아직 실험적인 기능임을 주의해야 한다. 공식적인 C++의 일부가 아니다.

 

저작자 표시
신고
by 흥배 2015.05.27 00:06
| 1 2 3 4 |

티스토리 툴바