如我們所知,CAFFE_ROOT下有一個文件夾叫tools,里面中有許多cpp文件,它們各自有其不同的功能。但是很顯然,當我們要完成某樣工作時,我們是不能直接用cpp文件的,只能用exe文件。如何利用這些cpp文件生成exe文件呢?這就是本次博客的主題。請記住,一大堆繁瑣的配置不是目的,我們的目標是成功compile和build文件夾tools中的cpp文件,以生成所需要的exe文件。
關於如何配置,給出一個不錯的參考文件:《windows+caffe+vs2013+cuda6.5配置記錄》。
沒錯就是它。之所以說這個寫得不錯,是因為作者真心寫得非常詳細,基本上一路照他說的做就可以了。
1 與參考文件的不同之處
1、一些名稱上的變化
參考文件給出的一些文件名稱、環境變量名等可能與你計算機中的不一樣,拿我自己的為例:
(1)CUDA_PATH_V6_5
我這里安裝的是cuda7.0,所以這里面凡是寫CUDA_PATH_V6_5的應該統統改成CUDA_PATH_V7_0。
(2)BOOST_1_56
caffe壓縮包解壓后,打開VS的“項目→屬性→VC++目錄→包含目錄”,可以發現給出的是“BOOST_1_56_0”,因此在設置環境變量時,應該保持一致,寫成“BOOST_1_56_0”。
2、一些與參考文件不同之處
(1)原文3.4.3里“編譯./src/util中的文件”把cu文件也添加進去了,其實不必添加cu文件,把cpp裝載進去就好。
(2)原文中“在db.cpp中作如下修改...CHECK_EQ”這一步都去掉,不知道是不是會有什么不好的影響。
2 怎么生成exe文件?
(1)對caffe壓縮包解壓后,由於“項目→屬性”中給出的是相對路徑,所以基本上不需要做什么變更,保持原樣就好。解壓后得到的文件夾里是這樣的:
雙擊Caffe.sln,即可進入VS2013界面。
(2)進入后記得把正上方Debug旁邊的win32改成x64,否則里面的每一個源文件都無法編譯:
如果各源文件上方的#include文件打波浪線了,則說明包含文件路徑沒有設置好;或者包含路徑設置好了,卻沒有把上圖的win32改成x64。
(3)現在VS2013的左邊欄中的內容如圖所示。配置了半天,我們要做什么用,怎么用呢?其關鍵就在於文件夾“tools”!
在tools中一次只能放一個源文件,該源文件擁有着“main”函數,也就是整個程序的入口。在不同的場合,我們具有不同的需求,也就是說一次性tools文件夾內只允許有一個源文件。比如當我們想跑mnist時,該文件夾內就載入caffe.cpp;如果想要將自己的圖像數據轉成leveldb格式,則該文件夾內就載入convert_imageset.cpp。在CAFFE_ROOT\tools中提供了多個這樣的源文件,可按需取用。
當build完畢后,在CAFFE_ROOT\x64\Debug中將會出現一個Caffe.exe文件,這就是可執行文件。在很多腳本文件里需要設置可執行文件的路徑,指的就是這個可執行文件。
(4)當生成caffe.cpp的可執行文件后,如果再往tools文件夾中載入第二個cpp文件(如convert_imageset.cpp)並build,則當前Caffe.exe的內容(即caffe.cpp的內容)將會被抹除掉。一個好的方法就是先給Caffe.exe重命名一下(比如改名成total.exe)然后再build新的cpp文件,這樣就可以把兩個可執行文件都保留下來了。
2016.5.12
by 悠望南山