cmake編譯外部庫
1. cmake 怎麼樣編譯庫的時候加其他庫
編譯mac靜態庫
這個比較簡單,直接Xcode -GXcode,然後用xcodebuild命令即可。
編譯Andoird靜態庫
編譯android庫我們同樣可以引入一個toolchain文件,這里我是從 android-cmake 裡面下載的。
在使用這個toolchain文件之前,我們先要使用ndk自帶的make-standalone-toolchain.sh腳本來生成對應平台的toolchain.這個腳本位於你的NDK的路徑下面的buil/tools目錄下。
比如要生成arm平台的toolchain,我們可以使用下列命令:
sh $ ANDROID_NDK / build / tools / make - standalone - toolchain . sh -- platform = android - $ANDROID_API_LEVEL -- install - dir = . / android - toolchain -- system = darwin - x86_64 -- ndk - dir = /Users / guanghui / AndroidDev / android - ndk - r9d / -- toolchain = arm - linux - androideabi - 4.8
這里的$ANDROID_NDK為你的NDK的安裝路徑。這段命令可以生成arm的toolchain,最終可以編譯出armeabi和armeabi-v7a靜態庫。 如果想生成x86的toolchain,指需要使用下列命令:
sh $ ANDROID_NDK / build / tools / make - standalone - toolchain . sh -- platform = android - $ANDROID_API_LEVEL -- install - dir = . / android - toolchain - x86 -- system = darwin - x86_64 -- ndk - dir= / Users / guanghui / AndroidDev / android - ndk - r9d / -- toolchain = x86 - 4.8
最後,我們要告訴CMake使用外部toolchain文件,可以使用參數-DCMAKE_TOOLCHAIN_FILE=xxx。此外,我們還需要在導出兩個環境變數給此toolchain文件:
export PATH = $ PATH : . / android - toolchain / bin
export ANDROID_STANDALONE_TOOLCHAIN = . / android - toolchain
cmake - DCMAKE_TOOLCHAIN_FILE = . . / android . toolchain . cmake - DANDROID_ABI = "armeabi" . .
2. Cmake動態編譯VTK庫(QVtkwidget)
在版本問題上大費周章之後,得到如下的成功嘗試
軟體版本說明:
PCl1.8.1 + VS2017 + Qt5.9.6 + Cmake + Vtk8.0.0
點擊Configure後對條目進行處理:(修改完成繼續Configure直到沒有錯誤)
1.點擊Add Entry添加
Name: CMAKE_DEBUG_POSTFIX 、Type: STRING 、Value:-gd、Description:空
讓vtk的lib最後分為debug版本跟release版本。Debug版本帶-gd。Release版本不帶-gd,方便區分.
2.勾選BUILD_SHARED_LIBS,這樣最後生成的vtk才會有dll跟lib
3.CMAKE_INSTALL_PREFIX設置為你清空的VTK文件夾(為了方便,這里選擇的路徑為PCL集成的VTK路徑)
4.勾選VTK_Group_Qt,這樣以後方便在qt裡面使用
5.修改Qt5_DIR路徑為PATH=D:/Qt/Qt5.12.0/5.12.0/msvc2017_64/lib/cmake/Qt5
6.修改VTK_QT_VERSION:STRING=5,使用Qt5修改相應版本號
7.如出現qmake路徑則修改QT_QMAKE_EXECUTABLE:FILEPATH=D:/Qt/Qt5.12.0/5.12.0/msvc2017_64/bin/qmake.exe
完成Configure,不出意外就不再顯示紅色,接著點Generate
接著以管理員身份運行VS2017,打開構建目錄下的VTK.sln
選擇Debug,x64,然後右鍵解決方案窗口的ALL_BUILD --> 生成。
漫長等待...ing
然後右鍵install --> 僅生成install
Release版本同理,先ALL_BUILD --> 生成 再 右鍵install --> 僅生成install
至此完成編譯VTK操作,接下來提取所需的QVtkwidget插件
3. 如何使用cmake編譯軟體項目3
1. 在主程序所在目錄的CMakeLists.txt中定義要編譯的主程序和輸出的可執行文件名:
#定義主程序名稱
add_executable(輸出的可執行文件名稱 源文件列表)
#定義鏈接庫
target_link_libraries(輸出的可執行文件名稱 鏈接庫1 鏈接庫2 ...)
2.在庫文件所在目錄中的CMakeLists.txt中告訴cmake將其所有庫文件編譯成動態庫:
#通過set命令自定義變數LIB_SRC包括那些源文件,這些文件將編譯到動態庫
set (LIB_SRC
libsrc1.cpp
libsrc2.cpp
libsrc3.cpp
)
#將上述文件編譯到庫中
add_library (庫名稱 SHARED ${LIB_SRC})
#定義庫的輸出位置, 如果在根目錄下的CMakeLists.txt中已經定義,此處可注釋掉。
set(LIBRARY_OUTPUT_PATH 具體的目錄位置)
