1. 程式人生 > >CGAL在VS2013中的安裝關鍵問題的解決

CGAL在VS2013中的安裝關鍵問題的解決

前言

最近需要用到CGAL的三角剖分功能,而且以後做研究也會需要用到,所以打算花點時間安裝CGAL。然而過程充滿了曲折,主要還是在編譯安裝上折騰比較久。後來安裝成功了回過頭來,才發現原來CGAL官網給的安裝步驟才是最好的,比在網上搜的要更及時,而且句句箴言!

如果英文還過得去,強烈推薦按照官方的步驟進行安裝。當然,這樣還是會遇到點小問題,我在以下會有所提及。

安裝CGAL前的準備

  1. cmake: 必須安裝,用於生成專案檔案
  2. boost:必須安裝。
  3. Qt:如果想要執行CGAL附帶的demo,就需要安裝,在此我們也一併介紹。
  4. 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位,所以很折騰)

  1. 有關安裝位置的選擇:安裝位置不一定在C盤,只需要保證之後加到環境變數中的 BOOT_ROOT(非必須),BOOT_LIBRARYDIR, BOOT_INCLUDEDIR 指向正確即可。比如筆者就安裝在了D:\boost_1_59_0\

  2. 環境變數的設定:設定兩個環境變數,因為Cmake在生成CGAL專案的時候需要找到boost並連線,需要用到這兩個環境變數

    BOOST_LIBRARYDIR=(boost安裝位置)\lib32-msvc-xx.0
    BOOST_INCLUDEDIR=(boost安裝位置)

  3. 將 “(boost安裝位置)\lib32-msvc-xx.0” 加入到 PATH 中去

至此boost安裝完成,可以嘗試執行test一下。注意將 BOOT_INCLUDEDIR,BOOT_LIBRARYDIR 分別加入到VS專案屬性中的包含目錄和庫目錄中去。

安裝Qt

Qt突然看上去要像是收費的樣子,很怕怕。不過沒關係,Qt提供了LGPL協議的開源版本,在其官網下往下拉即可看到。注意下載的時候下載offline的下載版,不然你會因為online版本不顯示下載進度而瘋掉的。

一路next,注意,安裝位置同樣可以不選擇C盤,只要環境變數 QTDIR 和 PATH 指向正確即可。

  1. 環境變數的設定

    QTDIR=D:\Qt\Qt5.5.1 (即Qt安裝位置)

  2. 將 “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裡面。

  1. 環境變數的設定

    QGLVIEWERROOT=C:\dev\libQGLViewer-2.6.3 (即LibQGLViewer安裝位置)

  2. 將 “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安裝位置)

參考與致謝