CMake的CPack
CMake不仅可以用来管理工程,编译,安装,还可以制作安装包,安装包可以是压缩包还可以是rpm包。
下面利用一个简单的例子来解释如何使用CMake的cpack制作安装包
工程名 = Speaker
目录结构
Speaker +
— CMakeLists.txt ———> 1
— src +
— CMakeLists.txt ———-> 2
— main.cpp
— greetings+
— CMakeLists.txt ———->3
— greet.cpp
— greet.h
工程有一个主程序 speaker和动态库 greetings
目的: 编译,安装,并制作安装包
总共3个CMakeLists.txt文件,我们分别使用1, 2, 3 来编号下面列出它们的内容:
CMakeLists.txt ———> 1
cmake_minimum_required(VERSION 2.8)
project(speaker)
add_subdirectory(src)
set( CMAKE_INSTALL_PREFIX "/opt/speaker" )
set(VERSION "1.0.1")
include (InstallRequiredSystemLibraries)
set(CPACK_PACKAGE_VERSION ${VERSION})
set(CPACK_PACKAGE_NAME "speaker")
set(CPACK_GENERATOR "RPM")
set(CPACK_PACKAGE_RELEASE 1)
set(CPACK_PACKAGE_CONTACT "test@foxavideo.com")
set(CPACK_PACKAGE_VENDOR "FoxAVideo")
set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
set(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/installer")
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${CMAKE_SYSTEM_PROCESSOR}")
include(CPack)
CMakeLists.txt ———> 2
include_directories( ${PROJECT_SOURCE_DIR}/src/greetings )
add_subdirectory(greetings)
set(appSrc main.cpp)
add_executable(speaker ${appSrc})
target_link_libraries( speaker greetings )
install( TARGETS speaker DESTINATION bin )
CMakeLists.txt ———> 3
set( libSrc greet.cpp )
add_library( greetings SHARED ${libSrc} )
install( TARGETS greetings DESTINATION lib )
main.cpp
#include <iostream>
#include "greet.h"
using namespace std;
int main( void )
{
cout<<"test world"<<endl;
sayWelcome();
}
greet.h
void sayWelcome( void );
greet.cpp
#include <iostream>
#include "greet.h"
void sayWelcome( void )
{
std::cout<<"welcome you guys"<<std::endl;
}
有了这些东西,我们在根目录下面执行下面的命令,
$> mkdir build
$> cd build
$> cmake ..
$> make
$> make install
$> cpack
然后我们发现在 /opt/下面的多了一个speaker文件夹,里面有bin和lib文件夹,里面是我们上面的工程里面的可执行文件和动态库文件。然后在工程的根目录下面多了一个installer文件夹,里面有个rpm文件,这就是要rpm安装包。
/opt/speaker这个下面的东西是执行 make install命令安装的。
rpm安装包是在执行 cpack文件生成的。这里要提一下,如果运行这个命令默认是找当前文件夹下面CPackConfig.cmake文件,所以这个命令的效果等同于
$> cpack –config CPackConfig.cmake
CPackConfig.cmake这个文件是
$> cmake ..
这个命令执行时生成的。和这个文件类似的还有一个CPackSourceConfig.cmake。这个用来生成发布源代码的安装包,可以试试
$> cpack –config CPackSourceConfig.cmake
再看看 installer这个目录下面新生成的文件。
注意文章一开头提到CMake还可以生成压缩文档形式的安装包,我们把第一个CMakeLists.txt文件的绿色的那一行去掉,也就是
set(CPACK_GENERATOR "RPM")
生成的就是压缩文档形式的安装包
这一行告诉cmake,使用rpm生成器生成安装包。
安装后使用rpm查询我们的包,
$> rpm -qa Speaker
发现找不到,然后再试试将Speaker改为speaker,
$> rpm -qa Speaker
speaker-1.0.1-1.x86_64
这是怎么回事呢?
原来是package name在制作安装包的自动转为小写了。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章转载自:IT夜班车,否则按侵权处理.