在Visual Studio開發c++程序時,怎樣使用和管理第三方的開源庫?

工作上需要開發跨平台的c++應用。 在Linux下使用第三方的庫,有yum等包管理軟體可以用,boost,thrift,redis, log庫等可以直接安裝到固定的路徑,使用時可以直接用-l鏈接。

在windows下,我已知的有兩種方式。一是 要手動編譯生成一大堆庫文件(boost 會有幾十個文件), 包括debug和release、多位元組和Unicode、32和64位的, 然後修改項目debug和release的配置。另外一種是把開源的項目源碼導進自己的工程里,通過項目依賴來生成和使用這些開源庫。

這兩種方法都不太方便,我在開發時經常會出現鏈接出錯的情況。大家有沒有什麼好的建議?

還有就是windows下多位元組和Unicode、32位和64位該該如何選擇?


NuGet Gallery,VS自帶。


我都是「把開源的項目源碼導進自己的工程里」的,不同的平台用不同的庫,寫不同的代碼,沒覺得有什麼不方便的。


現在可以用官方出的包管理工具Vcpkg: Microsoft/vcpkg: VC++ Packaging Tool

使用方法可以看官方博客: Visual C++ Team Blog


不要怕麻煩,我用的開源庫一般都是純c源碼,新建個靜態庫,源碼導進,編譯OK,併入solution,一勞永逸

當初zlib,cximage,fftw,mpeglib等都被我這麼一搞,估計連他們爹媽都不認識了


我一般是通過CMake來管理整個編譯鏈。反正CMake可以生成VS用的Project。


我的做法是參考Linux的路徑分法,自己維護一個目錄,比如叫C:/usr,把需要用到頭文件全放到C:/usr/include里,把需要的.lib文件全放C:/usr/lib里。

當然,可以的話再分別編譯32位64位兩個版本的lib,分別放在C:/usr/lib/x86和C:/usr/lib/x64里

然後在工程里添加include路徑C:/usr/include,添加鏈接路徑c:/usr/lib/x86或者c:/usr/lib/x64


我有一個專門的vc project,配置為static lib,將各種開源代碼解壓到這個工程目錄,批量添加進去,編譯,產生一個lib。不同的SLN中其他可執行文件,DLL等工程直接add reference這個project,即可方便的使用了。


1. 使用搞得定的庫。至少是開源的,注意庫之間的依賴關係。

2. 使用Cmake。無論是自己的工程,還是第三方。

3. 強烈反對環境變數

4. 自動化


使用環境變數減少工作量,也就是通過bat腳本啟動vs或者solution

不同環境下的include,lib的設置都寫在腳本里,vs里只是引用這些變數


換一個編譯器,比如mingw,這個就是gcc的windows版本。

如果你開發的東西要用到linux下的一些特有的東西,不好移植,你要考慮用windows下的cygwin,這個基本上所有的東西都能編譯過去。

也有特別的東西編不了,要看你用的是什麼了。


推薦閱讀:

C++項目怎麼適用不同的linux系統?
請問float的最大值是怎麼來的?
寫程序時中間變數用cnm,是什麼心態?
這一段 C++ 代碼有什麼樣的問題?
為什麼C語言不引入類這種語法?

TAG:MicrosoftVisualStudio | CC |