CMake構建學習筆記9-Eigen庫的構建
Eigen是一個高性能的C++線性代數庫,廣泛用于科學計算、機器學習、計算機視覺等領域。不過,Eigen有點特別,它是一個純頭文件實現的庫;也就是說,任何一個程序要引入它,只要include它的頭文件就可以了。這天然就規避了不同操作系統不同編譯器造成的二進制兼容的問題,所有的實現都include源代碼了,那還不是輕松跨平臺?
像Eigen這種風格的庫就被稱為Header Only庫。這種庫使用起來確實太方便了,所以現在很多庫都采取了這種設計。我們知道C/C++的聲明和實現是分開的,所以使用起來相當的麻煩,相同的函數簽名總是要寫兩次,然后把實現隱藏起來編譯成靜態庫或者動態庫。這種風格的庫就完全不會有這個問題,include頭文件就行。不過這種風格也不是沒有缺點,比如增加了調用方的構建時間、構建成果體積增加、符號沖突、不能隱藏實現等,所以采用這種風格的庫一般都是模板庫。
Header Only庫也并不意味著不需要構建,因為構建還是包含很多步驟的,使用CMake進行構建的關鍵指令如下:
# 配置CMake
cmake .. -G "$Generator" -A x64 `
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
-DCMAKE_PREFIX_PATH="$InstallDir" `
-DCMAKE_INSTALL_PREFIX="$InstallDir" `
-DBUILD_TESTING=OFF
# 構建階段,指定構建類型
cmake --build . --config RelWithDebInfo
# 安裝階段,指定構建類型和安裝目標
cmake --build . --config RelWithDebInfo --target install
如果設置不構建測試程序,這個構建過程其實就是復制必須的頭文件到安裝目錄。另外,還會生成一些.cmake格式的包配置文件到安裝目錄,這些文件是便于其他項目找到和使用這些Eigen的。不止Eigen,大多數CMake構建的庫都會生成類似的包配置文件,這一點我們放在后續的文章中進行一步論述。

浙公網安備 33010602011771號