【cmake系列使用教程】linux
cmake使用教程(二)-添加庫github
cmake使用教程(八)-macro和functionspa
這個系列的文章翻譯自官方cmake教程:cmake tutorial。翻譯
示例程序地址:github.com/rangaofei/t…
不會僅僅停留在官方教程。本人做爲一個安卓開發者,實在是沒有linux c程序開發經驗,望大佬們海涵。教程是在macos下完成,大部分linux我也測試過,有特殊說明的我會標註出來。本教程基於cmake-3.10.2,同時認爲你已經安裝好cmake。
假如想將咱們的項目分發給其餘人,以便他們能夠安裝並使用它。咱們但願在各類平臺上提供可執行文件或者源文件,構建支持二進制安裝和包管理特性的安裝包,如cygwin、debian、rpm等。爲了實現這一點,咱們將使用CPack來建立與CPack在章節包裝中描述的平臺特定安裝程序。具體來講,咱們須要在根目錄CMakeLists.txt的底部添加幾行代碼:
# build a CPack driven installer package
include (InstallRequiredSystemLibraries)
set (CPACK_RESOURCE_FILE_LICENSE
"${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
set (CPACK_PACKAGE_VERSION_MAJOR "${Tutorial_VERSION_MAJOR}")
set (CPACK_PACKAGE_VERSION_MINOR "${Tutorial_VERSION_MINOR}")
include (CPack)
複製代碼
首先要加入InstallRequiredSystemLibraries
。這個模塊將包括當前平臺項目所須要的任何運行時庫。接下來,咱們將一些CPack變量,如該項目的許可和版本信息。最後,咱們將加入CPack模塊,它將使用剛纔定義的變量變量和系統的一些其餘屬性來設置安裝程序。 咱們執行外部構建並查看生成的文件都有什麼:
~/Desktop/Tutorial/Step6/build/ tree -L 1
.
├── CMakeCache.txt
├── CMakeFiles
├── CPackConfig.cmake
├── CPackSourceConfig.cmake
├── CTestTestfile.cmake
├── Makefile
├── MathFunctions
├── TutorialConfig.h
└── cmake_install.cmake
複製代碼
注意其中兩個生成的文件CPackConfig.cmake
,CPackSourceConfig.cmake
,一會又大用處。
下一步是按照通常的方式構建項目,而後在其上運行CPack。要構建一個二進制版本,能夠運行:
cpack --config CPackConfig.cmake
複製代碼
下邊是日誌:
CPack: Create package using STGZ
CPack: Install projects
CPack: - Run preinstall target for: Tutorial
CPack: - Install project: Tutorial
CPack: Create package
CPack: - package: /Users/saka/Desktop/Tutorial/Step6/build/Tutorial-1.0.1-Darwin.sh generated.
CPack: Create package using TGZ
CPack: Install projects
CPack: - Run preinstall target for: Tutorial
CPack: - Install project: Tutorial
CPack: Create package
CPack: - package: /Users/saka/Desktop/Tutorial/Step6/build/Tutorial-1.0.1-Darwin.tar.gz generated.
複製代碼
從日誌能夠看到生成了兩個打包的文件Tutorial-1.0.1-Darwin.sh
,Tutorial-1.0.1-Darwin.tar.gz
。查看一下目錄:
~/Desktop/Tutorial/Step6/build/ tree -L 1
.
├── CMakeCache.txt
├── CMakeFiles
├── CPackConfig.cmake
├── CPackSourceConfig.cmake
├── CTestTestfile.cmake
├── Makefile
├── MathFunctions
├── Tutorial
├── Tutorial-1.0.1-Darwin.sh
├── Tutorial-1.0.1-Darwin.tar.gz
├── TutorialConfig.h
├── _CPack_Packages
├── cmake_install.cmake
└── install_manifest.txt
複製代碼
查看一下壓縮包內的文件:
~/Desktop/Tutorial/Step6/build/ tar -tf Tutorial-1.0.1-Darwin.tar.gz
Tutorial-1.0.1-Darwin/bin/
Tutorial-1.0.1-Darwin/bin/Tutorial
Tutorial-1.0.1-Darwin/bin/libMathFunctions.a
Tutorial-1.0.1-Darwin/include/
Tutorial-1.0.1-Darwin/include/MathFunctions.h
Tutorial-1.0.1-Darwin/include/TutorialConfig.h
複製代碼
這個是已經編譯好的問答壓縮而成的,解壓後能夠直接運行。
要構建一個源代碼版本,能夠運行:
cpack --config CPackSourceConfig.cmake
複製代碼
日誌輸出基本同上,只是包內的文件不同:
~/Desktop/Tutorial/Step6/build/ tar -tf Tutorial-1.0.1-Source.tar.gz
Tutorial-1.0.1-Source/CMakeLists.txt
Tutorial-1.0.1-Source/TutorialConfig.h.in
Tutorial-1.0.1-Source/tutorial.cxx
Tutorial-1.0.1-Source/MathFunctions/
Tutorial-1.0.1-Source/MathFunctions/MakeTable.cxx
Tutorial-1.0.1-Source/MathFunctions/mysqrt.cxx
Tutorial-1.0.1-Source/MathFunctions/CMakeLists.txt
...
複製代碼
固然咱們也能夠本身編寫這兩個文件定製咱們生成文件的規則,不過我估計只有閒的蛋疼的人才會本身編寫者兩個東西。
基本的使用教程已完畢,就是這麼官方,就是這麼坑爹。沒有講如何加入忽略打包的文件,沒有講解如何定製打包生成的文件名稱,沒有講解如何制定打包生成的壓縮包的位置,沒有講解生成壓縮包的類型如何指定。就是這麼官方,就是這麼坑爹。後邊教程我來填一些坑。