CMake教程讀書筆記-第三步,安裝與測試(1) 第三步,安裝與測試

第三步,安裝與測試

下面,我們將爲我們的項目添加安裝規則,以及測試支持。

安裝

相關代碼:3_install

安裝規則非常直觀,只需對想要安裝的文件,在項目以及子模塊中的 CMakeLists.txt 中指定相應路徑即可。

MathFunctions/CMakeLists.txt

MathFunctions 庫,我們通過向 MathFunctionsCMakeLists.txt 文件(注,不是頂級 CMakeLists.txt)加入如下兩行,實現對庫和頭文件的安裝規則設置:

install (TARGETS MathFunctions DESTINATION bin)
install (FILES MathFunctions.h DESTINATION include)

CMakeLists.txt

對整個應用程序,加入如下行到頂級 CMakeLists.txt 文件,來實現對可執行文件以及配置頭文件進行安裝。

# add the install targets
install (TARGETS Tutorial DESTINATION bin)
install (FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"        
         DESTINATION include)

這就是全部。這時候,你應當可以編譯這個項目,然後運行 make install (或者從IDE編譯INSTALL目標),然後相應的頭文件、庫、可執行文件將會被安裝。

CMake 變量 CMAKE_INSTALL_PREFIX 用來確定文件被安裝的根路徑, /usr/local/ 是默認的安裝路徑。

實踐

假設我們設置安裝路徑爲 myprefix, 那麼進行過程大致如下:

$mkdir myprefix
$ls -p
myprefix/  tree.cmakelog  tree.installlog  tree.origin  tutorial/
$tree . >tree.origin
$cat tree.origin 
.
├── myprefix
├── tree.cmakelog
├── tree.installlog
├── tree.origin
└── tutorial
    ├── CMakeLists.txt
    ├── MathFunctions
    │   ├── CMakeLists.txt
    │   ├── MathFunctions.h
    │   └── mysqrt.cpp
    ├── TutorialConfig.h.in
    └── tutorial.cpp

3 directories, 9 files

$cmake -DCMAKE_INSTALL_PREFIX=$(pwd)/myprefix tutorial/
$tree . >tree.cmakelog

$make
Scanning dependencies of target MathFunctions
[ 50%] Building CXX object MathFunctions/CMakeFiles/MathFunctions.dir/mysqrt.cpp.o
Linking CXX static library libMathFunctions.a
[ 50%] Built target MathFunctions
Scanning dependencies of target Tutorial
[100%] Building CXX object CMakeFiles/Tutorial.dir/tutorial.cpp.o
Linking CXX executable Tutorial
[100%] Built target Tutorial

$make install
[ 50%] Built target MathFunctions
[100%] Built target Tutorial
Install the project...
-- Install configuration: ""
-- Installing: /home/miracle/mydata/orgmode/data/f80366ab-6a10-4de9-9793-3a531afbc192/cmake/3_install/myprefix/bin/Tutorial
-- Installing: /home/miracle/mydata/orgmode/data/f80366ab-6a10-4de9-9793-3a531afbc192/cmake/3_install/myprefix/include/TutorialConfig.h
-- Installing: /home/miracle/mydata/orgmode/data/f80366ab-6a10-4de9-9793-3a531afbc192/cmake/3_install/myprefix/bin/libMathFunctions.a
-- Installing: /home/miracle/mydata/orgmode/data/f80366ab-6a10-4de9-9793-3a531afbc192/cmake/3_install/myprefix/include/MathFunctions.h

$tree myprefix >tree.install
$cat tree.install
myprefix/
├── bin
│   ├── libMathFunctions.a
│   └── Tutorial
└── include
    ├── MathFunctions.h
    └── TutorialConfig.h

2 directories, 4 files

安裝文件在 install_manifest.txt 也有指出。另外除了命令行中用 -DCMAKE_INSTALL_PREFIX=<install_path> 指定前綴外,還可在 CMakeLists.txt 中使用 SET(CMAKE_INSTALL_PREFIX <install_path>) 來指定。

常用過程

代碼:

$ tree
.
└── tutorial
    ├── CMakeLists.txt
    ├── MathFunctions
    │   ├── CMakeLists.txt
    │   ├── MathFunctions.h
    │   └── mysqrt.cpp
    ├── TutorialConfig.h.in
    └── tutorial.cpp

2 directories, 6 files

常用命令:

$mkdir build && cd build
$cmake -DCMAKE_INSTALL_PREFIX=$(pwd)/myprefix tutorial/
$make
$make install
$ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  install_manifest.txt  Makefile  MathFunctions  myprefix  Tutorial  TutorialConfig.h
$tree myprefix/
myprefix/
├── bin
│   ├── libMathFunctions.a
│   └── Tutorial
└── include
    ├── MathFunctions.h
    └── TutorialConfig.h

2 directories, 4 files
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章