article4 - webispy/aln GitHub Wiki

Windows์— vcpkg custom registry๋ฅผ ํ†ตํ•ด ๋ฐฐํฌํ•˜๊ธฐ

Windows ํ™˜๊ฒฝ์—์„œ C/C++ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ๋Š” ์ข…์ข… ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๊ณจ์น˜ ์•„ํ”ˆ ๋ฌธ์ œ๊ฐ€ ๋˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Microsoft์—์„œ ๊ฐœ๋ฐœํ•œ vcpkg๋Š” Windows, Linux, macOS์—์„œ C/C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํš๋“, ๋นŒ๋“œ ๋ฐ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋กœ ์ž๋ฆฌ ์žก์•˜์Šต๋‹ˆ๋‹ค.

vcpkg์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ๋งŒ์œผ๋กœ๋„ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๊ณ ๋ฏผ์„ ํ•ด๊ฒฐํ•ด์ฃผ์—ˆ์ง€๋งŒ, ๋•Œ๋กœ๋Š” ๊ณต์‹ ํฌํŠธ์— ํฌํ•จ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž ์ •์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํŠน์ • ๋ฒ„์ „์˜ ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ vcpkg custom registry์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด์ „์— ์†Œ๊ฐœํ–ˆ๋˜ ALN(Amazing Lucky Numbers) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์˜ˆ์ œ๋กœ ์‚ฌ์šฉํ•˜์—ฌ, vcpkg custom registry๋ฅผ ํ†ตํ•ด ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐฐํฌํ•˜๋Š” ์ „์ฒด ๊ณผ์ •์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

vcpkg

vcpkg๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์—์„œ ๊ฐœ๋ฐœํ•œ C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ, ๋‹ค์–‘ํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. vcpkg๋Š” CMake์™€ ๊ธด๋ฐ€ํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์–ด ์žˆ์–ด, CMake๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

vcpkg๋ฅผ ์ด์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

vcpkg install <package-name>  : ํŒจํ‚ค์ง€ ์„ค์น˜
vcpkg remove <package-name>   : ํŒจํ‚ค์ง€ ์ œ๊ฑฐ
vcpkg list                    : ์„ค์น˜๋œ ์ „์ฒด ํŒจํ‚ค์ง€ ๋ชฉ๋ก ํ™•์ธ
vcpkg search <package-name>   : ํŒจํ‚ค์ง€ ๊ฒ€์ƒ‰
vcpkg update                  : ํŒจํ‚ค์ง€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—…๋ฐ์ดํŠธ
vcpkg upgrade                 : ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ์—…๊ทธ๋ ˆ์ด๋“œ
vcpkg integrate install       : vcpkg๋ฅผ ํ˜„์žฌ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์— ํ†ตํ•ฉ
vcpkg integrate remove        : vcpkg ํ†ตํ•ฉ ์ œ๊ฑฐ
vcpkg export <package-name>   : ํŒจํ‚ค์ง€๋ฅผ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ

vcpkg๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Windows์— Git๊ณผ Visual Studio BuildTools๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์ด๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

winget install -e --id Git.Git
winget install -e --id=Microsoft.VisualStudio.2022.BuildTools

์ดํ›„ Visual Studio Installer๋ฅผ ํ†ตํ•ด MSVC C++ ๋นŒ๋“œ ๋„๊ตฌ์™€ ๊ฐ™์€ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ค€๋น„๊ฐ€ ๋๋‚ฌ์œผ๋ฉด, ์ด์ œ Git์„ ํ†ตํ•ด vcpkg๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์Šต๋‹ˆ๋‹ค.

git clone https://github.com/microsoft/vcpkg.git

๊ธฐ๋ณธ ์„ค์ • ๊ณผ์ •์ธ bootstrap-vcpkg.sh ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด์•ผ vcpkg.exe ์‹คํ–‰ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

cd vcpkg
bootstrap-vcpkg.bat

์ด์ œ vcpkg ๋ช…๋ น์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

vcpkg๋Š” Homebrew์™€ ์œ ์‚ฌํ•˜๊ฒŒ Git ์ €์žฅ์†Œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋˜์–ด ์žˆ๊ณ , vcpkg๋ฅผ ํ†ตํ•ด ์„ค์น˜๋˜๋Š” ํŒจํ‚ค์ง€๋“ค์€ ๋ชจ๋‘ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์„ธ๋ถ€ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

vcpkg/
โ”œโ”€โ”€ downloads/        : ํŒจํ‚ค์ง€ ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ด€๋ จ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ์ €์žฅ์†Œ
โ”œโ”€โ”€ installed/        : ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ
โ”‚   โ””โ”€โ”€ x64-windows/  : Windows 64๋น„ํŠธ์šฉ ์„ค์น˜ ํŒŒ์ผ
โ”‚       โ”œโ”€โ”€ bin/      : DLL ํŒŒ์ผ
โ”‚       โ”œโ”€โ”€ include/  : ํ—ค๋” ํŒŒ์ผ
โ”‚       โ”œโ”€โ”€ lib/      : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ
โ”‚       โ”œโ”€โ”€ debug/    : ๋””๋ฒ„๊ทธ ๋ฒ„์ „์œผ๋กœ ๋นŒ๋“œ๋œ DLL ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ
โ”‚       โ””โ”€โ”€ tools/    : ์‹คํ–‰ ํŒŒ์ผ ๋ฐ ๊ด€๋ จ ๋„๊ตฌ
โ”œโ”€โ”€ packages/         : ๋นŒ๋“œ๋œ ํŒจํ‚ค์ง€์˜ ์ž„์‹œ ์ €์žฅ์†Œ
โ”œโ”€โ”€ buildtrees/       : ํŒจํ‚ค์ง€ ๋นŒ๋“œ ์ค‘๊ฐ„ ํŒŒ์ผ ๋ฐ ๋กœ๊ทธ ์ €์žฅ์†Œ
โ”œโ”€โ”€ scripts/          : vcpkg ๋™์ž‘์— ํ•„์š”ํ•œ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ
โ””โ”€โ”€ ports/            : ๊ฐ ํŒจํ‚ค์ง€์˜ ํฌํŠธ ํŒŒ์ผ (๋นŒ๋“œ ๋ฐ ์„ค์น˜ ๋ฐฉ๋ฒ• ์ •์˜)

glib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ผ๋‹จ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

./vcpkg install glib

์˜์กด์„ฑ์œผ๋กœ ๊ฐ™์ด ์„ค์น˜๋˜๋Š” ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋“ค์€ ์ œ์™ธํ•˜๊ณ  ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ์„ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

vcpkg
โ”œโ”€โ”€ buildtrees
โ”‚   โ””โ”€โ”€ glib
โ”‚       โ”œโ”€โ”€ src                : ๋‹ค์šด๋กœ๋“œ๋œ ์†Œ์Šค ํŒŒ์ผ์˜ ์••์ถ• ํ•ด์ œ๋œ ๋””๋ ‰ํ† ๋ฆฌ
โ”‚       โ”œโ”€โ”€ x64-windows-dbg    : Debug์šฉ ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ
โ”‚       โ”œโ”€โ”€ x64-windows-rel    : Release์šฉ ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ
โ”‚       โ””โ”€โ”€ *.log              : ๋นŒ๋“œ ๋กœ๊ทธ ํŒŒ์ผ
โ”œโ”€โ”€ downloads
โ”‚   โ””โ”€โ”€ glib-2.78.4.tar.xz     : ์†Œ์Šค ์••์ถ• ํŒŒ์ผ
โ”œโ”€โ”€ installed
โ”‚   โ””โ”€โ”€ x64-windows
โ”‚       โ”œโ”€โ”€ bin                : *.dll, *.pdb
โ”‚       โ”œโ”€โ”€ debug
โ”‚       โ”‚   โ”œโ”€โ”€ bin            : Debug์šฉ์œผ๋กœ ๋นŒ๋“œ๋œ *.dll, *.pdb
โ”‚       โ”‚   โ””โ”€โ”€ lib            : Debug์šฉ์œผ๋กœ ๋นŒ๋“œ๋œ *.lib
โ”‚       โ”‚       โ””โ”€โ”€ pkgconfig  : *.pc
โ”‚       โ”œโ”€โ”€ include            : *.h
โ”‚       โ”œโ”€โ”€ lib                : *.lib
โ”‚       โ”‚   โ””โ”€โ”€ pkgconfig      : *.pc
โ”‚       โ”œโ”€โ”€ share
โ”‚       โ”‚   โ””โ”€โ”€ glib           : copyright ๋“ฑ
โ”‚       โ””โ”€โ”€ tools
โ”‚           โ””โ”€โ”€ glib           : ๊ฐ์ข… ํˆด(gdbus.exe, ...) ๋ฐ *.dll
โ””โ”€โ”€ packages
    โ””โ”€โ”€ glib_x64-windows
        โ””โ”€โ”€ {bin, debug, ...}  : installed์— ์„ค์น˜ํ•  ํŒŒ์ผ๋“ค

glib ํฌํŠธ ํŒŒ์ผ์— ์ •์˜๋œ ๋‚ด์šฉ์— ๋”ฐ๋ผ ์†Œ์Šค ์••์ถ•ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ downloads ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜๊ณ , buildtrees/glib/src ๋””๋ ‰ํ† ๋ฆฌ์— ์••์ถ•์„ ํ’‰๋‹ˆ๋‹ค. ์ดํ›„ buildtrees/glib/x64-windows-dbg ๋””๋ ‰ํ† ๋ฆฌ์—์„œ Debug์šฉ์œผ๋กœ ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ , buildtrees/glib/x64-windows-rel ๋””๋ ‰ํ† ๋ฆฌ์—์„œ Release์šฉ์œผ๋กœ ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด packages/glib_x64-windows ๋””๋ ‰ํ† ๋ฆฌ์— ์ž„์‹œ๋กœ ์„ค์น˜๋˜๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ ํ†ตํ•ฉ ๋””๋ ‰ํ† ๋ฆฌ์ธ installed/x64-windows ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค.

vcpkg ํŠน์ง•

vcpkg๋Š” ๋‹ค๋ฅธ ํŒจํ‚ค์ง• ํˆด๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋ช‡ ๊ฐ€์ง€ ๋…ํŠนํ•œ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ vcpkg์˜ ์ฃผ์š” ํŠน์ง•๋“ค์ž…๋‹ˆ๋‹ค:

  1. ์†Œ์Šค ๊ธฐ๋ฐ˜ ๋นŒ๋“œ๋ฅผ ํ†ตํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜: vcpkg๋Š” ํŒจํ‚ค์ง€๋ฅผ ์†Œ์Šค ์ฝ”๋“œ์—์„œ ๋นŒ๋“œํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž์‹ ์˜ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. ํ˜„์žฌ๊นŒ์ง€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจํ‚ค์ง€ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ์„œ๋ฒ„๋Š” ์ œ๊ณต๋˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋””๋ฒ„๊ทธ ๋ฐ ๋ฆด๋ฆฌ์ฆˆ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋™์‹œ ์„ค์น˜: vcpkg๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋””๋ฒ„๊ทธ์™€ ๋ฆด๋ฆฌ์ฆˆ ๋ชจ๋“œ๋กœ ๊ฐ๊ฐ ๋นŒ๋“œํ•˜์—ฌ ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์„ ๋ชจ๋‘ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋””๋ฒ„๊น…๊ณผ ์ตœ์ ํ™”๋œ ๋ฆด๋ฆฌ์ฆˆ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์†์‰ฝ๊ฒŒ ์ „ํ™˜ํ•˜๋ฉฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. CMake์™€์˜ ๊ธด๋ฐ€ํ•œ ํ†ตํ•ฉ: vcpkg๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ CMake ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  Autotools, Meson ๊ฐ™์€ ๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์ง€์›ํ•˜์ง€๋งŒ, ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋„ portfile.cmake ํŒŒ์ผ ๋‚ด์—์„œ ํ•ด๋‹น ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ํ—ฌํผ ํ•จ์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. ํด๋ž˜์‹(Classic) ๋ชจ๋“œ์™€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ(Manifest) ๋ชจ๋“œ ์ง€์›: ํด๋ž˜์‹ ๋ชจ๋“œ๋Š” ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋“ค๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ „์—ญ์ ์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์ด๊ณ , ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ชจ๋“œ๋Š” ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉฐ, ๊ฐ ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ๋งŒ๋“ค๊ธฐ

vcpkg๋Š” ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํฌํŠธ(ports)๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ํŒŒ์ผ ๋ฐ ์Šคํฌ๋ฆฝํŠธ์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

ํฌํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ์ผ๋“ค๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

  • vcpkg.json: ํฌํŠธ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜๋Š” JSON ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ฒ„์ „ ์ •๋ณด, ์˜์กด์„ฑ, ๋ผ์ด์„ผ์Šค ์ •๋ณด ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • portfile.cmake: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” CMake ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.
  • ํŒจ์น˜ ํŒŒ์ผ: ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด vcpkg๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์„ ๊ฒฝ์šฐ, ์ด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

vcpkg/ports ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋‹ค์–‘ํ•œ ํŒจํ‚ค์ง€์˜ ํฌํŠธ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, glib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํฌํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ์ผ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

vcpkg/ports/glib/
  โ”œโ”€โ”€ portfile.cmake                 : glib ๋นŒ๋“œ ๋ฐ ์„ค์น˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •์˜
  โ”œโ”€โ”€ vcpkg.json                     : glib ๋ฒ„์ „, ์˜์กด์„ฑ, ๋ผ์ด์„ผ์Šค ์ •๋ณด
  โ”œโ”€โ”€ libintl.patch                  : ํŒจ์น˜ ํŒŒ์ผ
  โ””โ”€โ”€ use-libiconv-on-windows.patch  : ํŒจ์น˜ ํŒŒ์ผ

vcpkg.json

์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ vcpkg.json ํŒŒ์ผ์€ vcpkg์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜๋Š” JSON ํŒŒ์ผ๋กœ, ์ด ํŒŒ์ผ์—๋Š” ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „ ์ •๋ณด, ์˜์กด์„ฑ, ๋ผ์ด์„ผ์Šค ์ •๋ณด ๋“ฑ๊ณผ ๊ฐ™์€ ์ค‘์š”ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํŒจํ‚ค์ง€๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์„ ํƒ์  ๊ธฐ๋Šฅ(Features)์— ๋Œ€ํ•œ ์ •๋ณด๋„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

vcpkg.json์˜ ์ฃผ์š” ํ•ญ๋ชฉ:

  • name: ํŒจํ‚ค์ง€์˜ ์ด๋ฆ„์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • version: ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • port-version: ํŒจํ‚ค์ง€์˜ ํฌํŠธ ๋ฒ„์ „์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋™์ผํ•œ ์†Œ์Šค ๋ฒ„์ „์—์„œ ํฌํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ ๊ฒฝ์šฐ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.
  • description: ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • homepage: ํŒจํ‚ค์ง€์˜ ํ™ˆํŽ˜์ด์ง€ URL์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • license: ํŒจํ‚ค์ง€์˜ ๋ผ์ด์„ผ์Šค๋ฅผ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
  • supports: ํŒจํ‚ค์ง€๊ฐ€ ์ง€์›ํ•˜๋Š” ํ”Œ๋žซํผ ๋ฐ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
  • dependencies: ํŒจํ‚ค์ง€๊ฐ€ ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • features: ํŒจํ‚ค์ง€๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์„ ํƒ์  ๊ธฐ๋Šฅ๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

glib ํฌํŠธ์— ๋Œ€ํ•œ vcpkg.json ํŒŒ์ผ์„ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

{
  "name": "glib",
  "version": "2.78.4",
  "port-version": 3,
  "description": "Portable, general-purpose utility library.",
  "homepage": "https://developer.gnome.org/glib/",
  "license": "LGPL-2.1-or-later",
  "supports": "!uwp & !xbox",
  "dependencies": [
    "dirent",
    "gettext",
    "libffi",
    "libiconv",
    "pcre2",
    {
      "name": "vcpkg-tool-meson",
      "host": true
    },
    "zlib"
  ],
  "features": {
    "libmount": {
      "description": "Build with libmount support.",
      "supports": "linux",
      "dependencies": [
        "libmount"
      ]
    },
    "selinux": {
      "description": "Build with selinux support.",
      "supports": "linux"
    }
  }
}

๋Œ€๋ถ€๋ถ„์˜ ํ•ญ๋ชฉ๋“ค์€ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋‹ค๋ฅธ ํŒจํ‚ค์ง• ์‹œ์Šคํ…œ์—์„œ๋Š” ์ƒ์†Œํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ํ•ญ๋ชฉ๋“ค ์œ„์ฃผ๋กœ ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

  • "port-version": 3: ๋‹ค๋ฅธ ํŒจํ‚ค์ง• ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ๋น„์ „(revision) ๋„˜๋ฒ„์™€ ๋น„์Šทํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ glib v2.78.4 ์†Œ์Šค์— ๋Œ€ํ•ด ํฌํŠธ ํŒจํ‚ค์ง• ์ž‘์—…์ด ์„ธ ๋ฒˆ์งธ ์ด๋ฃจ์–ด์ง„ ๋ฒ„์ „์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • "supports": "!uwp & !xbox": ํ•ด๋‹น ํŒจํ‚ค์ง€๊ฐ€ UWP(Universal Windows Platform)์™€ Xbox ํ”Œ๋žซํผ์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • "features": { ... }: glib ํŒจํ‚ค์ง€๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์„ ํƒ์  ๊ธฐ๋Šฅ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ๋Š” "libmount"์™€ "selinux"๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ํŒจํ‚ค์ง€ ์„ค์น˜ ์‹œ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • vcpkg install glib : ์ถ”๊ฐ€ feature ์—†์ด ์„ค์น˜
    • vcpkg install glib[libmount] : "libmount" feature๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์„ค์น˜
    • vcpkg install glib[libmount,selinux] : "libmount"์™€ "selinux" feature๋ฅผ ๋ชจ๋‘ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์„ค์น˜

portfile.cmake

portfile.cmake ํŒŒ์ผ์€ vcpkg์—์„œ ํฌํŠธ(ํŒจํ‚ค์ง€)๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” CMake ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ vcpkg๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํŒจํ‚ค์ง€๋ฅผ ์†Œ์Šค ์ฝ”๋“œ์—์„œ ๋นŒ๋“œํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ช…๋ น์–ด์™€ ์„ค์ •์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

portfile.cmake์˜ ์ฃผ์š” ๋‹จ๊ณ„:

  • ์†Œ์Šค ์ฝ”๋“œ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์••์ถ• ํ•ด์ œ
  • ๋นŒ๋“œ ์˜ต์…˜ ์„ค์ • (Feature ์ฒ˜๋ฆฌ)
  • ๋นŒ๋“œ ๋ฐ ์„ค์น˜
  • ๋””๋ฒ„๊ทธ ๋นŒ๋“œ์—์„œ ์ƒ์„ฑ๋œ ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์ œ๊ฑฐ

์œ„ ๋‹จ๊ณ„๋“ค์„ CMake์˜ ๊ธฐ๋ณธ ์Šคํฌ๋ฆฝํŠธ๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— vcpkg์—์„œ๋Š” ๋‹ค์–‘ํ•œ ํ—ฌํผ ํ•จ์ˆ˜ ๋ฐ ๋ณ€์ˆ˜๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„๋ณ„๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์••์ถ• ํ•ด์ œ ๋‹จ๊ณ„์— ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” ํ•จ์ˆ˜๋“ค:

  • vcpkg_from_github: Github์—์„œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • vcpkg_from_gitlab: GitLab์—์„œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • vcpkg_download_distfile: ์ž„์˜์˜ URL์—์„œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • vcpkg_extract_source_archive: ๋‹ค์šด๋กœ๋“œํ•œ ์†Œ์Šค ์•„์นด์ด๋ธŒ ํŒŒ์ผ์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  • vcpkg_apply_patches: ์†Œ์Šค ์ฝ”๋“œ์— ํŒจ์น˜๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ์˜ต์…˜ ์„ค์ • (Feature ์ฒ˜๋ฆฌ) ๋‹จ๊ณ„์— ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜:

  • vcpkg_check_features: Feature๋ฅผ ํ™•์ธํ•ด์„œ CMake ๋ณ€์ˆ˜๋กœ ๊ฐ’์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๋นŒ๋“œ ์‹œ์Šคํ…œ๋ณ„ ๋นŒ๋“œ ๋ฐ ์„ค์น˜ ๋‹จ๊ณ„์— ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋“ค:

๋””๋ฒ„๊ทธ ๋นŒ๋“œ์—์„œ ์ƒ์„ฑ๋œ ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์ œ๊ฑฐ: ๋ณดํ†ต ์•„๋ž˜์™€ ๊ฐ™์ด CMake์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ธ REMOVE_RECURSE๋ฅผ ์ด์šฉํ•ด ์ˆ˜๋™์œผ๋กœ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

file(REMOVE_RECURSE
    "${CURRENT_PACKAGES_DIR}/debug/include"
    "${CURRENT_PACKAGES_DIR}/debug/share"
)

์ „์ฒด ํ•จ์ˆ˜ ๋ชฉ๋ก์€ vcpkg ์„ค๋ช…์„œ ํ™ˆํŽ˜์ด์ง€์˜ ์™ผ์ชฝ ๋ชฉ๋ก์—์„œ ์ฐธ์กฐ -> ํฌํŠธ ํŒŒ์ผ ํ•จ์ˆ˜๋ฅผ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด์ œ glib ํฌํŠธ์— ๋Œ€ํ•œ portfile.cmake ํŒŒ์ผ์„ ํ†ตํ•ด ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋‚ด์šฉ๋“ค์ด ์ ์šฉ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

string(REGEX MATCH "^([0-9]*[.][0-9]*)" GLIB_MAJOR_MINOR "${VERSION}")
vcpkg_download_distfile(GLIB_ARCHIVE
    URLS "https://download.gnome.org/sources/glib/${GLIB_MAJOR_MINOR}/glib-${VERSION}.tar.xz"
    FILENAME "glib-${VERSION}.tar.xz"
    SHA512 6f3a06e10e7373a2dbf0688512de4126472fb73cbec488b7983b5ffecff09c64d7e1ca462f892e8f215d3d277d103ca802bad7ef0bd0f91edf26fc6ce67187b6
)

vcpkg_extract_source_archive(SOURCE_PATH
    ARCHIVE "${GLIB_ARCHIVE}"
    PATCHES
        use-libiconv-on-windows.patch
        libintl.patch
)

# ... ์ค‘๋žต ...

vcpkg_configure_meson(
    SOURCE_PATH "${SOURCE_PATH}"
    LANGUAGES C CXX OBJC OBJCXX
    ADDITIONAL_BINARIES
        ${ADDITIONAL_BINARIES}
    OPTIONS
        ${OPTIONS}
        -Dgtk_doc=false
        -Dinstalled_tests=false
        -Dlibelf=disabled
        -Dman=false
        -Dtests=false
        -Dxattr=false
)
vcpkg_install_meson(ADD_BIN_TO_PATH)
vcpkg_copy_pdbs()

# ... ์ค‘๋žต ...

set(GLIB_TOOLS
    gapplication
    gdbus
    gio
    gio-querymodules
    glib-compile-resources
    glib-compile-schemas
    gobject-query
    gresource
    gsettings
    gtester
)

# ... ์ค‘๋žต ...

vcpkg_copy_tools(TOOL_NAMES ${GLIB_TOOLS} AUTO_CLEAN)

vcpkg_fixup_pkgconfig()

# ... ์ค‘๋žต ...

file(REMOVE_RECURSE
    "${CURRENT_PACKAGES_DIR}/debug/include"
    "${CURRENT_PACKAGES_DIR}/debug/share"
    "${CURRENT_PACKAGES_DIR}/share/gdb"
    "${CURRENT_PACKAGES_DIR}/debug/lib/gio"
    "${CURRENT_PACKAGES_DIR}/lib/gio"
)

vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSES/LGPL-2.1-or-later.txt")

ํŒŒ์ผ์ด ๋„ˆ๋ฌด ๊ธธ์–ด์„œ ์ผ๋ถ€ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ํ•ญ๋ชฉ๋“ค์€ ์ƒ๋žตํ•˜์˜€๋Š”๋ฐ, ์œ„์—์„œ ์„ค๋ช…๋“œ๋ฆฐ ์ฃผ์š” ๋‹จ๊ณ„์— ๋งž๊ฒŒ CMake ์Šคํฌ๋ฆฝ๊ฐ€ ์ž‘์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌํŠธ ์ž‘์„ฑ

์˜ˆ์ œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ALN ๊ธฐ์ค€์œผ๋กœ ์‹ค์ œ๋กœ ํฌํŠธ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ž‘์—…ํ•  ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ vcpkg/ports ํ•˜์œ„์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

mkdir ports/aln

ports/aln/vcpkg.json ํŒŒ์ผ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ALN ์ž์ฒด๊ฐ€ ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„, ๋ฒ„์ „๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์ •๋ณด์™€ ์˜์กด์„ฑ ์ •๋ณด๋งŒ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

{
  "name": "aln",
  "version": "0.1.0",
  "description": "Amazing Lucky Numbers",
  "homepage": "https://github.com/webispy/aln",
  "license": "Apache-2.0",
  "dependencies": [
    "glib",
    "pkgconf",
    {
      "name": "vcpkg-cmake",
      "host": true
    },
    {
      "name": "vcpkg-cmake-config",
      "host": true
    }
  ]
}

์ด์ œ ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ports/aln/portfile.cmake ํŒŒ์ผ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ALN์˜ ๊ฒฝ์šฐ ๋‚ด๋ถ€์ ์œผ๋กœ CMake ๊ธฐ๋ฐ˜์˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, vcpkg์—์„œ ์ œ๊ณตํ•˜๋Š” vcpkg_cmake_* ๊ณ„์—ด์˜ ํ—ฌํผ ํ•จ์ˆ˜๋“ค์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

vcpkg_from_github(
    OUT_SOURCE_PATH SOURCE_PATH
    REPO webispy/aln
    REF v0.1.0
    SHA512 5727316847c18ac42c7a683f0b6d3ec5d97bdc372c2732d259206589684d95b4108ec956eab29470dc567d96af650758f0805ae790a5b50b20c27344728db6dd
    HEAD_REF master
)

vcpkg_cmake_configure(
    SOURCE_PATH "${SOURCE_PATH}"
)

vcpkg_cmake_install()
vcpkg_copy_pdbs()
vcpkg_fixup_pkgconfig()

vcpkg_copy_tools(TOOL_NAMES aln AUTO_CLEAN)

# Clean
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")

vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")

์ด๋ ‡๊ฒŒ ํ•ด์„œ ํฌํŠธ ํŒŒ์ผ ์ž‘์„ฑ์„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •์ƒ์ ์œผ๋กœ ๋นŒ๋“œ๊ฐ€ ๋˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. (์˜์กด์„ฑ ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์„ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๋‹ค๋ฅด๊ฒŒ ๋” ๋งŽ์€ ํŒจํ‚ค์ง€ ์„ค์น˜ ๊ณผ์ •์ด ์ง„ํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

C:\workspace\vcpkg> ./vcpkg install aln
Computing installation plan...
The following packages will be built and installed:
    aln:[email protected]
Detecting compiler hash for triplet x64-windows...
Compiler found: C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.40.33807/bin/Hostx64/x64/cl.exe
Restored 0 package(s) from C:\Users\work\AppData\Local\vcpkg\archives in 86.9 us. Use --debug to see more details.
Installing 1/1 aln:[email protected]...
Building aln:[email protected]...
-- Downloading https://github.com/webispy/aln/archive/v0.1.0.tar.gz -> webispy-aln-v0.1.0.tar.gz...
-- Extracting source C:/workspace/vcpkg/downloads/webispy-aln-v0.1.0.tar.gz
-- Using source at C:/workspace/vcpkg/buildtrees/aln/src/v0.1.0-0e2680e997.clean
-- Found external ninja('1.11.0').
-- Configuring x64-windows
-- Building x64-windows-dbg
-- Building x64-windows-rel
-- Fixing pkgconfig file: C:/workspace/vcpkg/packages/aln_x64-windows/lib/pkgconfig/aln.pc
-- Using cached msys2-mingw-w64-clang-x86_64-pkgconf-1~2.2.0-1-any.pkg.tar.zst.
-- Using cached msys2-msys2-runtime-3.5.3-3-x86_64.pkg.tar.zst.
-- Using msys root at C:/workspace/vcpkg/downloads/tools/msys2/8fb75a18dbf79dc6
-- Fixing pkgconfig file: C:/workspace/vcpkg/packages/aln_x64-windows/debug/lib/pkgconfig/aln.pc
-- Installing: C:/workspace/vcpkg/packages/aln_x64-windows/share/aln/copyright
-- Performing post-build validation
Stored binaries in 1 destinations in 275 ms.
Elapsed time to handle aln:x64-windows: 11 s
aln:x64-windows package ABI: 201b058fcb0b7c098975c32e39c5c6239c89fd4af9edc1c422d1f902bd652855
Total install time: 11 s
aln provides pkg-config modules:

  # Library for Amazing Lucky Number generation
  aln

๋นŒ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”Œ๋žซํผ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์‹คํ–‰ ํŒŒ์ผ์ด bin์ด ์•„๋‹ˆ๋ผ tools์— ์„ค์น˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋จผ์ € ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

C:\workspace\vcpkg> cd .\installed\x64-windows\tools\aln\

ls ๋ช…๋ น์œผ๋กœ ์„ค์น˜๋œ ํŒŒ์ผ ๋ชฉ๋ก์„ ํ™•์ธํ•ด ๋ณด๋ฉด, ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ์ธ aln.exe์™€ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

C:\workspace\vcpkg\installed\x64-windows\tools\aln> ls

    ๋””๋ ‰ํ„ฐ๋ฆฌ: C:\workspace\vcpkg\installed\x64-windows\tools\aln

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----      2024-07-18   ์˜คํ›„ 3:47          11264 aln.dll
-a----      2024-07-18   ์˜คํ›„ 3:47          11776 aln.exe
-a----      2024-07-18   ์˜คํ›„ 3:47         413696 aln.pdb
-a----      2024-07-17   ์˜คํ›„ 5:43        1195008 glib-2.0-0.dll
-a----      2024-07-17   ์˜คํ›„ 5:26        1077248 iconv-2.dll
-a----      2024-07-17   ์˜คํ›„ 5:35          96768 intl-8.dll
-a----      2024-07-17   ์˜คํ›„ 5:41         522240 pcre2-8.dll

๋˜ํ•œ, ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ๋„ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

C:\workspace\vcpkg\installed\x64-windows\tools\aln> .\aln.exe
03 14 26 09 25 10
08 02 21 04 44 29
42 25 26 34 29 36
24 09 05 30 23 46
07 18 06 37 38 05

์ด๋ ‡๊ฒŒ ํ•ด์„œ vcpkg์šฉ ํฌํŠธ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ฐฐํฌํ•˜๋ ค๋Š” ํŒจํ‚ค์ง€๊ฐ€ ๊ณต์‹์ ์ด๊ณ  ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค๋ฉด, ์ž‘์„ฑํ•œ ํฌํŠธ๋ฅผ vcpkg์— Pull request๋กœ ์ œ์ถœํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ALN๊ณผ ๊ฐ™์ด ์˜ˆ์ œ๋กœ ์ž‘์„ฑํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ•œ์ •๋œ ๊ณณ์—์„œ๋งŒ ์‚ฌ์šฉ๋  ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“  ๊ฒฝ์šฐ, ๊ณต์‹ ์ €์žฅ์†Œ ๋Œ€์‹  Custom registry๋ฅผ ํ†ตํ•ด ํฌํŠธ๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Custom registry

vcpkg์˜ Custom Registry ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ํฌํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ณต์‹ vcpkg ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์™ธ๋ถ€์—์„œ ํŒจํ‚ค์ง€๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Registry ์ƒ์„ฑ

๋จผ์ € Registry๋กœ ์‚ฌ์šฉํ•  ๋””๋ ‰ํ† ๋ฆฌ(aln-vcpkg-registry)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฐจํ›„์— vcpkg ๋ช…๋ น์œผ๋กœ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด vcpkg ๋””๋ ‰ํ† ๋ฆฌ์™€ ๊ฐ™์€ ๋ ˆ๋ฒจ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

workspace
โ”œโ”€โ”€ vcpkg               : vcpkg๊ฐ€ ์„ค์น˜๋œ ๋””๋ ‰ํ† ๋ฆฌ
โ””โ”€โ”€ aln-vcpkg-registry  : Custom registry๋กœ ์ƒ์„ฑํ•  ๋””๋ ‰ํ† ๋ฆฌ

์•„๋ž˜์™€ ๊ฐ™์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ Git ์ €์žฅ์†Œ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

C:\workspace> mkdir aln-vcpkg-registry
C:\workspace> cd aln-vcpkg-registry
C:\workspace\aln-vcpkg-registry> git init .
Initialized empty Git repository in C:/workspace/aln-vcpkg-registry/.git/

vcpkg์—์„œ ์ œ๊ณตํ•˜๋Š” x-init-registry ๋ช…๋ น์„ ์ด์šฉํ•ด Registry๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

C:\workspace\aln-vcpkg-registry> ..\vcpkg\vcpkg.exe x-init-registry .
Successfully created registry at C:\workspace\aln-vcpkg-registry\.

์ด์ „ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“ค์—ˆ๋˜ aln ํฌํŠธ๋ฅผ Custom registry๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.

C:\workspace> Move-Item -Path "vcpkg/ports/aln" -Destination "aln-vcpkg-registry/ports/"

๊ธฐ๋ณธ์ ์ธ ์ž‘์—…์€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๊นŒ์ง€ ์ž‘์—…ํ•œ ๋‚ด์šฉ๋“ค์„ ์ปค๋ฐ‹์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

C:\workspace\aln-vcpkg-registry> git add .
C:\workspace\aln-vcpkg-registry> git commit -m "Initial commit"
[master (root-commit) f3f0c27] Initial commit
 3 files changed, 45 insertions(+)
 create mode 100644 ports/aln/portfile.cmake
 create mode 100644 ports/aln/vcpkg.json
 create mode 100644 versions/baseline.json

์ด์ œ ์ž„์‹œ๋กœ ์ƒ์„ฑํ–ˆ๋˜ versions database(versions/baseline.json) ํŒŒ์ผ์„ ํฌํŠธ์— ๋งž๊ฒŒ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ vcpkg์—์„œ ๋ช…๋ น์„ ์ œ๊ณตํ•ด์ฃผ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์‹คํ–‰ํ•˜๋ฉด ์—…๋ฐ์ดํŠธ๊ฐ€ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

C:\workspace\aln-vcpkg-registry> ../vcpkg/vcpkg `
    --x-builtin-ports-root=./ports `
    --x-builtin-registry-versions-dir=./versions `
    x-add-version --all --verbose --overwrite-version
added version 0.1.0 to C:\workspace\aln-vcpkg-registry\versions\a-\aln.json (new file)
added version 0.1.0 to C:\workspace\aln-vcpkg-registry\versions\baseline.json

์ˆ˜์ •๋œ ํ•ญ๋ชฉ๋“ค์„ Git ์ปค๋ฐ‹์œผ๋กœ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

C:\workspace\aln-vcpkg-registry> git add .
C:\workspace\aln-vcpkg-registry> git commit -m "Update versions database"

์ „์ฒด ๊ฐ€์ด๋“œ๋Š” https://learn.microsoft.com/en-us/vcpkg/produce/publish-to-a-git-registry ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

Registry๋ฅผ ์ด์šฉํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜

์œ„์—์„œ ์ƒ์„ฑํ•œ Custom registry๋ฅผ ์ด์šฉํ•ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํด๋ž˜์‹ ๋ชจ๋“œ

ํด๋ž˜์‹ ๋ชจ๋“œ์—์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ --overlay-ports๋ฅผ ์ด์šฉํ•ด์„œ ํŒจํ‚ค์น˜๋ฅผ ์„ค์น˜ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

./vcpkg install aln --overlay-ports=../aln-vcpkg-registry/ports

๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ชจ๋“œ

๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ชจ๋“œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋ณ„๋„์˜ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ(test)๋ฅผ ์ƒ์„ฑํ•œ ํ›„, vcpkg ๋ช…๋ น์„ ํ†ตํ•ด ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ(vcpkg.json) ๋ฐ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ํŒŒ์ผ(vcpkg-configuration.json)์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

C:\workspace> mkdir test
C:\workspace> cd test
C:\workspace\test> ..\vcpkg\vcpkg.exe new --application

Custom registry ์ถ”๊ฐ€๋ฅผ ์œ„ํ•ด vcpkg-configuration.json ํŒŒ์ผ์„ ํŽธ์ง‘๊ธฐ๋กœ ์˜คํ”ˆํ•ฉ๋‹ˆ๋‹ค.

C:\workspace\test> notepad vcpkg-configuration.json

registries ๋ฐฐ์—ด์— Custom registry์— ๋Œ€ํ•œ ์ •๋ณด(Github ์ฃผ์†Œ, ์ปค๋ฐ‹ ID, ์ œ๊ณตํ•˜๋Š” ํŒจํ‚ค์ง€ ๋ชฉ๋ก)๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

{
  "default-registry": {
    "kind": "git",
    "baseline": "1318ab14aae14db20085441cd71366891a9c9d0c",
    "repository": "https://github.com/microsoft/vcpkg"
  },
  "registries": [
    {
      "kind": "artifact",
      "location": "https://github.com/microsoft/vcpkg-ce-catalog/archive/refs/heads/main.zip",
      "name": "microsoft"
    },
    {
      "kind": "git",
      "repository": "https://github.com/webispy/aln-vcpkg-registry",
      "baseline": "f929043290a441ba01bdf06e122eb57e6ada4855",
      "packages": [ "aln" ]
    }
  ]
}

์„ค์น˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด test ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ ์ •๋ณด์— aln์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

C:\workspace\test> ..\vcpkg\vcpkg.exe add port aln

vcpkg.json ํŒŒ์ผ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "dependencies": [
    "aln"
  ]
}

์ด์ œ ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

C:\workspace\test> ..\vcpkg\vcpkg.exe install
Fetching registry information from https://github.com/webispy/aln-vcpkg-registry (HEAD)...
Fetching registry information from https://github.com/microsoft/vcpkg (HEAD)...
# ์ค‘๋žต: ... ์˜์กด์„ฑ ํŒจํ‚ค์ง€ ์„ค์น˜ ...
Installing 14/14 aln:[email protected]...
Building aln:[email protected]...
C:\Users\work\AppData\Local\vcpkg\registries\git-trees\c35212cbf7f33194a4c120e1bcce4381de128dab: info: installing overlay port from here
-- Using cached webispy-aln-v0.1.0.tar.gz.
-- Cleaning sources at C:/workspace/vcpkg/buildtrees/aln/src/v0.1.0-0e2680e997.clean. Use --editable to skip cleaning for the packages you specify.
-- Extracting source C:/workspace/vcpkg/downloads/webispy-aln-v0.1.0.tar.gz
-- Using source at C:/workspace/vcpkg/buildtrees/aln/src/v0.1.0-0e2680e997.clean
-- Found external ninja('1.11.0').
-- Configuring x64-windows
-- Building x64-windows-dbg
-- Building x64-windows-rel
-- Fixing pkgconfig file: C:/workspace/vcpkg/packages/aln_x64-windows/lib/pkgconfig/aln.pc
-- Using cached msys2-mingw-w64-clang-x86_64-pkgconf-1~2.2.0-1-any.pkg.tar.zst.
-- Using cached msys2-msys2-runtime-3.5.3-3-x86_64.pkg.tar.zst.
-- Using msys root at C:/workspace/vcpkg/downloads/tools/msys2/8fb75a18dbf79dc6
-- Fixing pkgconfig file: C:/workspace/vcpkg/packages/aln_x64-windows/debug/lib/pkgconfig/aln.pc
-- Installing: C:/workspace/vcpkg/packages/aln_x64-windows/share/aln/copyright
-- Performing post-build validation
Stored binaries in 1 destinations in 252 ms.
Elapsed time to handle aln:x64-windows: 10 s
aln:x64-windows package ABI: 854463babb3e57397d66c8c04e5c39f3c26f718d5be1e765066795495c56baf6
Total install time: 11 s
aln provides pkg-config modules:

  # Library for Amazing Lucky Number generation
  aln

ํŒจํ‚ค์ง€๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ

์ด๋ ‡๊ฒŒ ํ•ด์„œ Windows์—์„œ vcpkg ํฌํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  Custom registry๋ฅผ ํ†ตํ•ด ํŒจํ‚ค์ง€๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์ด ์—ฌ๋Ÿฌ๋ถ„์˜ vcpkg ํ™œ์šฉ์— ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.