İngilizce dilinde oku

Aracılığıyla paylaş


Sık Sorulan Sorular

Klasik mod ve bildirim modu nedir?

Bağımlılıklarınızı vcpkg ile yönetmenin iki yolu vardır:

  1. Bildirim modu , doğrudan bağımlılıklarınızı, sürüm kısıtlamalarınızı ve kullanılan kayıt defterlerinizi adlı vcpkg.jsonbir dosyada bildirmenizi sağlar. Bu dosya kod deponuza eklenmelidir ve kaynak denetim sisteminizde iade edilebilir. Bağımlılıklar adlı vcpkg_installedbir alt klasöre yüklenir. Bu şekilde, her kod projesi kendi bağımlılık kümesine sahip olabilir; sistem genelinde hiçbir şey yüklü değildir. vcpkg'yi bildirim modunda çalıştırmak vcpkg install için (başka bağımsız değişken olmadan) veya MSBuild ve CMake projeleriyle otomatik tümleştirmeden yararlanabilirsiniz. Bağımlılıklarınız üzerinde daha iyi denetim sahibi olduğunuzdan, çoğu durumda klasik mod üzerinden projeleriniz için bildirimleri kullanmanızı öneririz. Daha fazla ayrıntı için Bildirim modu makalemize bakın.
  2. Klasik mod , yükleme, değiştirme veya kaldırma için her doğrudan bağımlılığı belirten vcpkg komutlarını çalıştırmayı içeren bağımlılıkları yönetmenin daha geleneksel bir yoludur. Bağımlılıklar vcpkg yükleme dizininde depolanır, bu nedenle birden çok tüketen proje aynı bağımlılık kümesine başvurabilir. Daha fazla ayrıntı için Klasik mod makalemize bakın.

Yeni bir kitaplığa katkıda bulunabilir miyim?

Evet! Başlangıç olarak katkı yönergelerimizi okuyarak başlayın. Ayrıca daha fazla ayrıntıya giren Bakımcı Kılavuzumuza da göz atın. Başlamanıza yardımcı olması için vcpkg'ye bağlantı noktası eklemeye yönelik bir öğreticimiz de vardır.

Katkıda bulunmak istiyorsanız ancak aklınızda belirli bir kitaplık yoksa yeni bağlantı noktası isteklerinin listesine göz atın.

vcpkg önceden oluşturulmuş ikili paketler oluşturabilir mi? vcpkg tarafından kullanılan ikili biçim nedir?

Evet! Diğer ortamlara export aktarmak için ikili dosyalar oluşturmak istiyorsanız komutuna bakın.

Alternatif olarak, amacınız daha sonra yeniden kullanmak üzere işlemler tarafından vcpkg install oluşturulan ikili dosyaları korumaksa ikili önbelleğe alma özelliğine bakın

Kitaplıkları Nasıl yaparım? güncelleştirin?

Bağımlılıklarınızı yönetmek için bir bildirim (vcpkg.json dosyası) kullanıyorsanız, bu dosyayı güncelleştirmeniz gerekir. Ayrıntılar için sürüm oluşturma başvurusu belgelerine bakın.

vcpkg'yi klasik modda kullanıyorsanız (paketleri yönetmek için komutları çalıştırıyorsanız, bildirim dosyası yok), komut belgelerine vcpkg update bakın. Bu komut, geçerli portfile'larınızla eşitlenmemiş tüm paketleri listeler. Ardından değişiklikleri onaylamak için komutunu çalıştırmanız vcpkg upgrade gerekir.

Daha fazla kitaplık Nasıl yaparım??

Kitaplık listesi dizinden ports\ numaralandırılır. Tasarım gereği, kendinize veya şirketinize uygun gördüğünüz şekilde bu dizinden kitaplık ekleyebilir ve kaldırabilirsiniz. Zipfile'ları ve GitHub depolarını paketleme örneklerimize bakın.

Doğrudan GitHub'dan kopyalamanızı ve bağlantı noktası dosyası listesini güncelleştirmek için komutunu kullanmanızı git pull öneririz.

Bu araçla özel bir kitaplık oluşturabilir miyim?

Evet. Kendi bağlantı noktanızı oluşturmak için paketleme örneğimizi izleyin ve özel bağlantı noktalarınızı yönetmeyi öğrenmek için katman bağlantı noktaları ve kayıt defterleri belgelerine bakın.

Özel kitaplıklarınızı bir kayıt defterinde yayımlayarak bunu daha ileri taşıyabilirsiniz. Kayıt defterleri oluşturma makalesine bakın. Kayıt defteri, açık kaynak kitaplıkları içeren vcpkg ile sağlanana benzer bir bağlantı noktası koleksiyonudur.

Bu araçla önceden oluşturulmuş bir özel kitaplık kullanabilir miyim?

Evet. portfile.cmake bir kitaplık için temel olarak, üst bilgileri ve ikili dosyaları içinde ${CURRENT_PACKAGES_DIR}doğru düzenlemeye yerleştiren bir betiktir, bu nedenle önceden oluşturulmuş ikili dosyaları çekmek için dosyaları doğrudan indirip yerleştiren bir bağlantı noktası dosyası yazabilirsiniz.

Bunun bir örneğini görmek için, dosyaları Windows SDK'sının dışına hangilerinin kopyaladığına bakın ports\opengl\portfile.cmake .

vcpkg ile hangi platformları hedefleyebilirim?

Yerleşik, sürekli tümleştirme test edilen üçlülerimiz şunlardır:

  • Windows Masaüstü (x86, x64, x64-static, arm64)
  • Evrensel Windows Platformu (x64 ve arm64)
  • Mac OS X (x64 statik)
  • Linux (x64 statik)
  • Android (x64, arm64, arm-neon)

Bu hedefler, her vcpkg sürümüyle uyumluluk açısından daha sıkı bir şekilde test edilir. Ancak, iOS, MinGW, WebAssembly, freeBSD ve openBSD gibi daha fazla platform ve mimari ile çok daha fazla sayıda topluluk üçlüsünün kullanımına sunulmuştur.

İhtiyaçlarınıza bağlı olarak kendi üçüzlerinizi de tanımlayabilirsiniz. vcpkg çok özelleştirilebilir.

Geçerli liste için bkzvcpkg help triplet. ve daha fazla ayrıntı için üçüz belgelerimizi gözden geçirin.

Vcpkg Linux/OS X üzerinde çalışır mı?

Evet! OS X ve Ubuntu 22.04 üzerinde sürekli test yapıyoruz, ancak kullanıcıların Arch, Fedora ve FreeBSD ile başarılı olduğunu biliyoruz. Sık kullandığınız Linux dağıtımıyla ilgili sorun yaşıyorsanız bir sorunda bize bildirin. Size yardımcı olmak isteriz!

vcpkg güncelleştirildi Nasıl yaparım??

En son kaynakları almak için yürütgit pull, ardından vcpkg'yi güncelleştirmek için (Windows) veya ./bootstrap-vcpkg.sh (Unix) komutunu çalıştırın bootstrap-vcpkg.bat . Veya Visual Studio ile birlikte gelen bir vcpkg kopyası kullanıyorsanız Visual Studio Yükleyicisi Visual Studio sürümünüzü güncelleştirmeniz yeterlidir.

Nasıl yaparım? bir makinede kitaplığın farklı sürümlerini kullanıyor musunuz?

Tek tek projelerin bağımlılıklarını yönetmek için bildirim dosyalarını kullanmanızı öneririz. Bu, birden çok proje aynı makinede olsa bile çalışır ve paket sürümlerini ve hangi kayıt defterleri kitaplıklarının geldiğini kolayca yönetmenize olanak sağlar.

Ancak, bunun yerine klasik modu kullanıyorsanız, vcpkg'nin tek bir örneğinde (örneğin, bir küme installed\, packages\ports\ vb.), bir kitaplığın yalnızca bir sürümünü yükleyebilirsiniz (aksi takdirde, üst bilgiler birbiriyle çakışabilir!). Sistem genelinde paket yöneticileri konusunda deneyimli olanlar için vcpkg'deki paketler veya X-devel paketlerine X-dev karşılık gelir. Bu durumda, kitaplığın farklı sürümlerini farklı projeler için kullanmak için ayrı vcpkg örnekleri oluşturmanızı ve proje başına tümleştirme mekanizmalarını kullanmanızı öneririz. Her kitaplığın sürümleri içindeki ports\dosyalar tarafından belirtilir, bu nedenle standart git komutlar kullanılarak kolayca işlenir. Bu, kitaplık kümesinin tamamını birbiriyle çalışan tutarlı bir eski sürüm kümesine geri almayı çok kolaylaştırır. Daha sonra belirli bir kitaplığı ileriye sabitlemeniz gerekiyorsa, uygun sürümünü ports\<package>\kullanıma almak kadar kolaydır. Uygulamanız kitaplıkların sürümlerine çok duyarlıysa, proje kaynaklarınız ile birlikte kaynak denetiminizde ihtiyacınız olan belirli bağlantı noktası dosyası kümesini denetlemenizi ve öğesinin --vcpkg-root çalışma dizinini vcpkg.exeyeniden yönlendirme seçeneğini kullanmanızı öneririz.

vcpkg gizliliğimi nasıl korur?

Gizlilikle ilgili tüm bilgiler için Gizlilik belgesine bakın.

Vcpkg'nin araç zinciri dosyasıyla kendi CMake araç zinciri dosyamı kullanabilir miyim?

Evet. Zaten bir CMake araç zinciri dosyanız varsa, araç zinciri dosyamızı kendi dosyanızın sonuna eklemeniz gerekir. Bu bir include(<vcpkg_root>\scripts\buildsystems\vcpkg.cmake) yönerge kadar basit olmalıdır. Alternatif olarak, dosyamızın scripts\buildsystems\vcpkg.cmake içeriğini mevcut araç zinciri dosyanızın sonuna kopyalayabilirsiniz.

Kitaplıkları yeniden derlemek için kendi/özel bayraklarımı kullanabilir miyim?

Evet. Geçerli sürümde, bunları değiştirmenin standartlaştırılmış genel bir yolu yoktur, ancak tek tek portfile'ları düzenleyebilir ve tam derleme işlemini istediğiniz gibi ayarlayabilirsiniz.

Portfile dosyasındaki değişiklikleri kaydederek (ve bunları denetleyerek), gelecekte sıfırdan yeniden oluşturup tam olarak hangi ayarları kullandığınızı unutmuş olsanız bile aynı sonuçları alırsınız.

Özel yapılandırmalar için vcpkg tümleştirmesi alabilir miyim?

Evet. vcpkg, kitaplık oluştururken yalnızca standart "Yayın" ve "Hata Ayıklama" yapılandırmalarını üretse de, projenizin standart yapılandırmalarına ek olarak projelerinizin özel yapılandırmaları için tümleştirme desteği alabilirsiniz.

Her şeyden önce, vcpkg standart "Release" (resp. "Debug") yapılandırmasıyla uyumlu bir yapılandırma olarak "Release" (resp. "Debug") ile başlayan tüm özel yapılandırmaları otomatik olarak kabul eder ve buna göre hareket eder.

Diğer yapılandırmalarda, yapılandırmanız ile hedef standart yapılandırma arasındaki uyumluluğu bildirmek için yalnızca proje dosyanızdaki (.vcxproj) MSBuild $(VcpkgConfiguration) makrosunun geçersiz kılınmış olması gerekir. Ne yazık ki, MSBuild'in sıralı yapısı nedeniyle, vcpkg tümleştirmesi yüklenmeden önce bildirebilmesi için bu ayarları vcxproj'unuza çok daha yüksek bir değere eklemeniz gerekir. Makronun $(VcpkgConfiguration) "Geneller" PropertyGroup'a eklenmesi önerilir.

Örneğin, proje dosyanıza ekleyerek "MyRelease" yapılandırmanız için destek ekleyebilirsiniz:

<PropertyGroup Label="Globals">
  ...
  <VcpkgConfiguration Condition="'$(Configuration)' == 'MyRelease'">Release</VcpkgConfiguration>
</PropertyGroup>

Elbette, bu yalnızca özel yapılandırmanız hedef yapılandırmayla uyumluysa (örneğin, her ikisi de aynı çalışma zamanı kitaplığıyla bağlantı kurmalıdır) uygun ikili dosyalar oluşturur.

Kullanıcı genelinde tümleştirmeyi kullanamıyorum. Proje başına tümleştirme kullanabilir miyim?

Evet. Proje başına kullanıma uygun bir NuGet paketi, komut (basit bağlama) veya vcpkg export --nuget komut (shrinkwrapped) aracılığıyla vcpkg integrate project oluşturulabilir.

NuGet paketiyle aynı sonucu elde etmek için daha düşük düzeyli vcpkg integrate project bir mekanizma dosya üzerinden <vcpkg_root>\scripts\buildsystems\msbuild\vcpkg.targets yapılır. Tek ihtiyacınız olan .vcxproj dosyanıza içeri aktarmak ve yerine <vcpkg_root> vcpkg'yi yüklediğiniz yoldur:

<Import Project="<vcpkg_root>\scripts\buildsystems\msbuild\vcpkg.targets" />

Geçici dosyaları nasıl kaldırabilirim?

Yalnızca yüklü paketleri önemsiyorsanız, vcpkg kök klasörünün içinde aşağıdaki dizinleri silmek güvenlidir:

  • packages,
  • buildtrees,
  • ve downloads

Derleme tamamlandıktan sonra vcpkg'nin geçici dosyaları otomatik olarak silmesini sağlamak için komutunuzdaki bayrağını kullanabilirsiniz--clean-after-build.vcpkg install

vcpkg, vcpkg kök klasörünün dışındaki diğer geçici konumları da kullanır. Visual Studio tümleştirme dosyaları, varsayılan ikili önbellek ve kayıt defterleri önbelleği; operasyon sisteminize bağlı olarak tümü aşağıdaki yolda bulunur:

Windows'da:

  • %LocalAppData%/vcpkg

Linux/macOS'ta:

  • $XDG_CACHE_HOME/vcpkg
  • ~/.cache/vcpkg (yalnızca tanımlanmamışsa XDG_CACHE_HOME )

Yerel ikili veya varlık önbelleklerini yapılandırdıysanız, bunları da gerektiği gibi düzenli aralıklarla temizlemek isteyebilirsiniz.

CMake, vcpkg tarafından dahili olarak nasıl kullanılır?

vcpkg, derleme betik dili olarak CMake'i dahili olarak kullanır. Bunun nedeni CMake'in platformlar arası açık kaynak kitaplıkları için son derece yaygın bir derleme sistemi olması ve genel olarak C++ projeleri için çok popüler hale gelmesidir. Windows'da kolayca edinilebilir, sistem genelinde kurulum gerektirmez ve tanıdık olmayan kullanıcılar için okunabilir.

vcpkg, derlenmiş ikili dosyaların genel veya özel bir sunucudan indirilmesini destekliyor mu?

Kitaplıklarınızı tercih ettiğiniz derleme yapılandırmalarıyla bir kez derlemenizi ve ikili önbelleğe alma özelliğini kullanarak her seferinde yeniden derlemek zorunda kalmadan ikili dosyaları yeniden kullanmanızı öneririz. Bu, bir takım projesi üzerinde çalışırken veya birden çok makine, kapsayıcı, sanal makine vb. arasında hem yerel hem de sürekli tümleştirme ortamında oluştururken kullanışlıdır.

Hangi MSVC araç kümeleri desteklenir?

Visual Studio 2015 Güncelleştirme 3 ve üzerini destekliyoruz.

Visual Studio neden kullanıcı genelinde tümleştirme etkin kitaplıklarımı kullanmıyor?

Kullanıcı genelinde tümleştirmenin (vcpkg integrate install) etkinleştirilmesi, bazı proje özellikleri için varsayılanı değiştirir. Özellikle, "C/C++/Genel/Ek Ekleme Dizinleri" ve "Bağlayıcı/Genel/Ek Kitaplık Dizinleri" normalde kullanıcı genelinde tümleştirme olmadan boş olur. Tümleştirme ile boş bir değer, vcpkg tarafından sağlanan genişletilmiş varsayılan değerin geçersiz kılındığı ve üst bilgilerin/kitaplıkların bulunacağı anlamına gelir. Varsayılanı yeniden etkinleştirmek için, özellikleri üst öğeden devralacak şekilde ayarlayın.

NuGet neden değil?

NuGet, MSBuild'e güçlü bir bağımlılığı olan .NET kitaplıkları için bir paket yöneticisidir. Yerel C++ müşterilerinin özel gereksinimlerini en az üç yolla karşılamaz.

  • Derleme Tatları. Derleme seçeneklerinin birçok olası bileşimiyle, gerçekten eksiksiz bir seçenek kümesi sağlama görevi, doğası gereği imkansızdır. Ayrıca, makul bir şekilde tamamlanmış ikili paketlerin indirme boyutu muazzam hale gelir. Bu, sonuçları birden çok pakete bölmeyi zorunlu kılar, ancak daha sonra arama yapmak çok zorlaşır.

  • İkili ve Kaynak karşılaştırması. İlk noktaya çok yakından bağlı olan NuGet, nispeten küçük, önceden oluşturulmuş ikili dosyalar sağlamak için sıfırdan tasarlanmıştır. Yerel kodun doğası gereği geliştiricilerin ABI uyumluluğu, performans, bütünlük ve hata ayıklanabilirliğini sağlamak için kaynak koda erişimi olmalıdır.

  • Dll başına ve Uygulama başına karşılaştırması. NuGet yüksek oranda proje odaklıdır. Bu, doğal olarak kararlı ABI'lere sahip yönetilen dillerde iyi çalışır, çünkü temel kitaplıklar daha yüksek olanları bölmeden gelişmeye devam edebilir. Ancak, ABI'nin çok daha kırılgan olduğu yerel dillerde tek sağlam strateji, her kitaplığı son uygulamaya dahil edilecek tam bağımlılıklara göre açıkça oluşturmaktır. NuGet'te bunu sağlamak zordur ve yüksek oranda bağlantısız ve bağımsız sürüme sahip bir ekosisteme yol açar.

Neden Conan değil?

Conan.io, python'da yazılmış, herkese açık, proje merkezli, platformlar arası bir C++ paket yöneticisidir. Başlıca farklarımız şunlardır:

  • Genel federasyon ile özel federasyon karşılaştırması. Conan, her paketin bağımsız kopyalarını yayımlayan kişilere dayanır. Bu yaklaşımın, farklı şekillerde bozulan çok sayıda paketi teşvik ettiğini düşünüyoruz. Belirli bir duruma uygun olan birkaç kullanıcıyı belirlemek üzere Boost 1.56 için 20'den fazla genel paket listesinden seçim yapmak için kullanıcının zamanının boşa harcandığına inanıyoruz. Buna karşılık, vakaların büyük çoğunluğu için çalışan ve kullanıcıların özel sürümlerine serbestçe sızmasına izin veren tek ve işbirliğine dayalı bir sürüm olması gerektiğine inanıyoruz. Bunun birbiriyle yoğun bir şekilde test edilen ve ihtiyacınız olan özel değişiklikler için harika bir temel oluşturan bir dizi yüksek kaliteli paketle sonuçlanacağına inanıyoruz.

  • Dll başına ve Uygulama başına karşılaştırması. Bağımlılıklar bir kitaplık düzeyinde bağımsız olarak sürümlendiğinde, her derleme ortamını tamamen benzersiz, sağlam, iyi test edilmiş bir ekosistemden yararlanamayan veya katkıda bulunamayan bir ortam olmaya teşvik eder. Buna karşılık, tüm kitaplıkları bir platform olarak (sistem paketi yöneticisine benzer şekilde) bir araya toplayarak, ekosistemin kalitesini ve kararlılığını en üst düzeye çıkarmak için çok yaygın kitaplık sürümleri üzerinde test ve çabayı birleştirmeyi umuyoruz. Bu ayrıca, bir kitaplığın uygulamanın seçenekleriyle çakışan sürümler isteme özelliğini de tasarlar (ben openssl Z ve boost X istiyorum, ancak X yalnızca openssl Y ile çalıştığını iddia ediyor).

  • Platformlar arası ve tek platformlu. Birçok platformda barındırılmak mükemmel bir kuzey yıldızı olsa da, apt-get, yum ve homebrew tarafından sağlanan sistem tümleştirme ve kararlılık düzeyinin otomatik betiklerle brew install boost alışveriş apt-get install libboost-all-dev yapmaya ihtiyaç duymaya değer olduğuna inanıyoruz. Sistemimizi bu çok başarılı sistem yöneticileriyle bir dünyayla tümleştirmeyi mümkün olduğunca kolaylaştırmayı seçtik .vcpkg install boost

  • C++/CMake ile python karşılaştırması. Python birçok kişi tarafından sevilen mükemmel bir dil olsa da, paket yöneticisi olarak iş akışınız için önemli bir araç seçerken saydamlık ve aşinalığın en önemli faktörler olduğuna inanıyoruz. Sonuç olarak, uygulama dillerinin mümkün olduğunca evrensel olarak kabul edilebilir olmasını seçtik: C++ C++ programcıları için bir C++ paket yöneticisinde kullanılmalıdır. Paket yöneticinizi anlamak için başka bir programlama dili öğrenmeniz gerekmemelidir.

Neden Chocolatey değil?

Chocolatey, uygulamaları yönetmek için mükemmel bir sistemdir. Ancak, şu anda yeniden dağıtılabilir geliştirici varlıkları almak ve hata ayıklama konusunda size yardımcı olmak için tasarlanmamıştır. Buna karşılık vcpkg, uygulamanızı oluşturmak için ihtiyacınız olan kitaplıkları size ulaştırmak ve istediğiniz herhangi bir platformda (Chocolatey! dahil) teslim etmenize yardımcı olmak için tasarlanmıştır.