第三步,安裝與測試
下面,我們將爲我們的項目添加安裝規則,以及測試支持。
安裝
相關代碼:3_install
安裝規則非常直觀,只需對想要安裝的文件,在項目以及子模塊中的 CMakeLists.txt
中指定相應路徑即可。
MathFunctions/CMakeLists.txt
對 MathFunctions
庫,我們通過向 MathFunctions
的 CMakeLists.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