建議
C 槽空間至少要有 1 TB,我之前編譯完 llvm + halide,Windows 11 的 C 槽就用了 500 多 GB。
另一個 Windows 10 系統,編譯 pcl(vcpkg install pcl[core,qt,vtk]:x64-windows-static)就花了 200 GB 並且因為 C 槽空間不足,最後還差 10 來個函式庫還未編譯完畢(已用空間包含先前編譯過的 x64-windows 版本了)。
vcpkg 相關
安裝函式庫的指令,xxx 表示函式庫名稱,yyy、zzz 則是表示相關的函式庫,後面分別是指定編譯版本以及是否要靜態編譯。
vcpkg install xxx[yyy, zzz]:x64-windows (x64-windows-static)
vcpkg 安裝完會有提醒事項,如果是使用 CMake 來規劃專案,就需要把 find_package 相關的提示記起來,一般來說函式庫定義名稱會等於安裝時的 xxx,只是改成大寫。
vcpkg integrate install 則是讓 vcpkg 跟 Visual Studio 做連結,使用 cmake 時只要簡單指定 -DCMAKE_TOOLCHAIN_FILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake 就可以找到相關函式庫的路徑。
如果函式庫有相關,最好是要一起編譯,不然先後順序不對可能就要重新編譯,以我最近遇到的 hailde 及 llvm 來說,如果沒有先編譯 halide,llvm 就有可能要重新編譯,以我最新的筆電 i7-13700H 來說,光 llvm 就要編譯 13 個小時以上。
如果之前安裝完函式庫未記住 CMake targets,可以去 C:\src\vcpkg\installed\x64-windows\share\xxx 資料夾,檢查是否有相關的 .cmake 檔案可以參考,一般來說檔名可能會是這種形式 <PackageName>Config.cmake,詳情可以參考這裡。
cmake 相關
cmake 是透過 CMakeLists.txt 來建構專案,如果函式庫是用 vcpkg 安裝的方式,則我們的 CMakeLists.txt 可以很簡單來寫。
以此專案為例,原本作者應該是沒有使用 vcpkg,故 CMakeListx.txt 寫的就比較囉嗦。
在有 vcpkg 下,我們應該只需要 find_package 及 include_directories 即可(碰到的專案還不夠多,待驗證?),剛好這個專案有例外,故我們需要另外指定 VTK include 路徑。
cmake_minimum_required(VERSION 3.19)
project(3DReconstruct)
find_package(OpenCV CONFIG REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
find_package(PCL CONFIG REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
# fix pcl include <pcl/visualization/cloud_viewer.h> issue
# this error is due to the unadaptable including format between PCL and vcpkg.
# so we must use absolute path, this solution depends on your installation version of VTK.
# see https://github.com/microsoft/vcpkg/issues/24439
include_directories(C:/src/vcpkg/installed/x64-windows/include/vtk-9.0)
# build executable
add_executable(Phase_Shift main.cpp CalPhase.h CameraCalib.h)
add_library(Camera_Calib_LIB CameraCalib.cpp CameraCalib.h)
add_library(CalPhase_LIB CalPhase.cpp CalPhase.h)
add_library(ProPoint_LIB Propointcloud.cpp Propointcloud.h)
target_link_libraries(Phase_Shift ${OpenCV_LIBS} ${PCL_LIBRARIES})
target_link_libraries(Phase_Shift Camera_Calib_LIB)
target_link_libraries(Phase_Shift CalPhase_LIB)
target_link_libraries(Phase_Shift ProPoint_LIB)
沒有留言:
張貼留言