CGAL在VS2013中的安裝關鍵問題的解決
前言
最近需要用到CGAL的三角剖分功能,而且以後做研究也會需要用到,所以打算花點時間安裝CGAL。然而過程充滿了曲折,主要還是在編譯安裝上折騰比較久。後來安裝成功了回過頭來,才發現原來CGAL官網給的安裝步驟才是最好的,比在網上搜的要更及時,而且句句箴言!
如果英文還過得去,強烈推薦按照官方的步驟進行安裝。當然,這樣還是會遇到點小問題,我在以下會有所提及。
安裝CGAL前的準備
- cmake: 必須安裝,用於生成專案檔案
- boost:必須安裝。
- Qt:如果想要執行CGAL附帶的demo,就需要安裝,在此我們也一併介紹。
- LibQGLViewer:如果要執行demo裡面的3D部分,就需要安裝。
安裝 cmake
下載最新的cmake,然後一路next安裝到底,還是很省心的。
安裝完成後,確認(cmake安裝目錄)\bin 已經加入PATH,不在裡面的話就自己新增好啦。
安裝 boost
雖然boost是個標頭檔案庫,直接加入預設include檔案中就能執行大部分的功能,但既然要裝,說不準哪天就要用到了,所以還是一口氣裝全吧。boost如果是下載原始碼進行編譯,則會遇到相當大的困難,我在下載原始碼嘗試很久之後最終放棄。
在CGAL官方安裝說明中推薦下載預編譯好的boost進行安裝。所以如果不是對自己特別自信,請去下載預編譯版本吧。官網這樣告訴我們
I download and run the file boost_1_59_0-msvc-xx.0-32.exe (where xx = 10 for MSVC 2010, 11 for 2012, 12 for 2013)
I choose to extract the files to a new directory c:\dev\libboost_1_59_0
我的電腦是裝的VS2013,所以就選擇boost_1_59_0-msvc-12.0-32.exe。之所以不裝64位的是因為可能會因為各種支援問題出現莫名其妙的錯誤(筆者沒有試過,但的確從前安裝matplotlib的時候才發現其中一個依賴項不支援64位,所以很折騰)
有關安裝位置的選擇:安裝位置不一定在C盤,只需要保證之後加到環境變數中的 BOOT_ROOT(非必須),BOOT_LIBRARYDIR, BOOT_INCLUDEDIR 指向正確即可。比如筆者就安裝在了
D:\boost_1_59_0\
環境變數的設定:設定兩個環境變數,因為Cmake在生成CGAL專案的時候需要找到boost並連線,需要用到這兩個環境變數
BOOST_LIBRARYDIR=(boost安裝位置)\lib32-msvc-xx.0
BOOST_INCLUDEDIR=(boost安裝位置)將 “(boost安裝位置)\lib32-msvc-xx.0” 加入到 PATH 中去
至此boost安裝完成,可以嘗試執行test一下。注意將 BOOT_INCLUDEDIR,BOOT_LIBRARYDIR 分別加入到VS專案屬性中的包含目錄和庫目錄中去。
安裝Qt
Qt突然看上去要像是收費的樣子,很怕怕。不過沒關係,Qt提供了LGPL協議的開源版本,在其官網下往下拉即可看到。注意下載的時候下載offline的下載版,不然你會因為online版本不顯示下載進度而瘋掉的。
一路next,注意,安裝位置同樣可以不選擇C盤,只要環境變數 QTDIR 和 PATH 指向正確即可。
環境變數的設定:
QTDIR=D:\Qt\Qt5.5.1 (即Qt安裝位置)
將 “D:\Qt\Qt5.5.1\5.5\msvcXXXX_XX\bin” 加入到 PATH 中去
LibQGLViewer
C:\dev\libQGLViewer-2.6.3
Start the x86 Visual Studio Command Prompt 就是在VS目錄中bin下面的vcvars32.bat,在命令列下執行一下。回到LibQGLViewer的安裝目錄,cmd下執行。不先執行的話,會出現rc 不是命令balabala
qmake.exe
nmake
如果出現 cl 不是命令balabala
就需要新增 “(VS 安裝目錄)\VC\bin”到path裡面。
環境變數的設定:
QGLVIEWERROOT=C:\dev\libQGLViewer-2.6.3 (即LibQGLViewer安裝位置)
將 “C:\dev\libQGLViewer-2.6.3\QGLViewer\release;C:\dev\libQGLViewer-2.6.3\QGLViewer\debug” 加入到 PATH 中去
安裝並編譯CGAL
下載
同樣注意下載installer而不是原始碼進行編譯!下載 CGAL-4.7-Setup.exe 並安裝。比如安裝到了C:\dev\CGAL-4.7
(實際上會安裝到C:\Program Files\CGAL-4.7
)
注意最後會提醒要將 (CGAL-4.7安裝目錄)\auxiliary\gmp\lib 加入到PATH中去
cmake 生成
用管理員身份開啟Cmake,否則無法對C盤進行操作。
I set C:\dev\CGAL-4.7 for source and C:\dev\CGAL-4.7\build as binaries
Click on Configure
Choose “Visual Studio xx xxxx” for the 32-bit version and “Visual Studio xx xxxx Win64” for the 64-bit version
Click on Generate
注意,這裡Cmake有可能會報錯,因為它找不到boost。不要管它的提示什麼BOOST_INCLUDE_DIR
沒有設好,你確定自己的環境變數沒有錯而又使用的是最新的boost,那麼很有可能是Cmake沒有及時更新,沒有識別出你的版本。進入Cmake的安裝目錄,找到 ...\share\cmake-3.3\Modules\FindBoost.cmake
,在以下程式碼中新增自己的boost的版本號。然後就能順利Generate。
# The user has not requested an exact version. Among known
# versions, find those that are acceptable to the user request.
set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
"1.59.0" "1.58.0" "1.58" "1.57.0" "1.57" "1.56.0" "1.56" "1.55.0" "1.55" "1.54.0" "1.54"
"1.53.0" "1.53" "1.52.0" "1.52" "1.51.0" "1.51"
"1.50.0" "1.50" "1.49.0" "1.49" "1.48.0" "1.48" "1.47.0" "1.47" "1.46.1"
"1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42"
"1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37"
"1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0"
"1.34" "1.33.1" "1.33.0" "1.33")
set(_boost_TEST_VERSIONS)
編譯安裝
generate成功後進入build目錄,點開CGAL.sln,用Debug和Release模式各生成一遍ALL_BUILD即可。建議再單獨生成以下帶Install字樣的專案,因為貌似它會自動給Cmake新增 FindCGAL.cmake。還會在C:\Program Files (x86)\
下生成一個 CGAL 檔案,方便引用。
在編譯完成後,在\build\include\CGLA目錄下會出現一個compiler_config.h
的檔案,複製出來放在\include下。否則會在編譯自己的專案時找不到。
最後,將 (CGAL-4.7安裝目錄)\build\bin 加入到PATH中去
使用CGAL
在使用CGAL的時候,需要設定 屬性->配置屬性->VC++目錄:
可執行目錄:
$(QTDIR)\5.5\msvc2013\bin
$(CGAL_DIR)\auxiliary\gmp\lib
$(CGAL_DIR)\bin(or \build\bin)
include目錄中包含:
$(BOOST_INCLUDEDIR)
$(CGAL_DIR)\include
$(CGAL_DIR)\auxiliary\gmp\include
lib目錄中包含:
$(QTDIR)\5.5\msvc2013\lib
$(BOOST_LIBRARYDIR)
$(CGAL_DIR)\lib
$(CGAL_DIR)\auxiliary\gmp\lib
屬性->配置屬性->連結器->輸入中附加依賴項:
libgmp-10.lib
libmpfr-4.lib
忽略項:
gmp-vc100-mt-gd.lib
mpfr-vc100-mt-gd.lib
即便如此,最後還是會出現“找不到 CGAL-vc120-mt-gd-4.7.dll”,沒關係,從$(CGAL_DIR)\build\bin
中找出來,扔到你的專案目錄下即可。
再次提醒一些容易忘記的細節
加入PATH的目錄:
(cmake安裝目錄)\bin
(boost安裝位置)\lib32-msvc-xx.0
(Qt安裝目錄)\5.5\msvcXXXX_XX\bin
(libQGLViewer安裝目錄)\QGLViewer\release
(libQGLViewer安裝目錄)\QGLViewer\debug
(CGAL-4.7安裝目錄)\auxiliary\gmp\lib
(CGAL-4.7安裝目錄)\build\bin
環境變數:
BOOST_LIBRARYDIR=(boost安裝位置)\lib32-msvc-xx.0
BOOST_INCLUDEDIR=(boost安裝位置)
QTDIR=D:\Qt\Qt5.5.1 (即Qt安裝位置)
QGLVIEWERROOT=C:\dev\libQGLViewer-2.6.3 (即LibQGLViewer安裝位置)