您的位置:首页 > 其它

cmake 那些事儿~

2015-08-12 11:25 281 查看

安装cmake

centos系统可以配置yum源进行安装:

yum install cmake


个人比较喜欢源码安装,痴情于自我掌握命运,附上cmake下载地址(http://www.cmake.org/download/),选择最新的稳定版即可。

其实源码安装只要你在Linux下尝试过一种,你就会发现此时天空飘来五个字“那都不是事“,有兴趣的可以参见gcc源码安装

代码结构

|—bin

|—include

|———a.h

|———b.h

|—etc

|—src

|———a.cpp

|———b.cpp

|———dir

|—————c.cpp

|—build

我的目录结构简介如下:

目录名描述
bin存放可执行文件
include存放源码头文件
etc存放配置文件
src存放源码实现文件
build用于cmake外部编译的目录
基本了解后就来看看cmake如何入手吧(备注:以下只阐述了我用到的要点,并不是cmake的全部,若有兴趣想深入了解的可以去查看官方文档)。

引入CMake

src同级目录编写主CMakeLists.txt文件

#指定服务名称
PROJECT(TestService)
#限定需要的cmake版本 若所在服务器版本低于此要求则报错
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
#设置基本的编译参数
SET(CMAKE_CXX_FLAGS "-g -std=c++11 -pthread")
#将程序所需的头文件所在目录引入,包括第三方的 多个之间空格分离
INCLUDE_DIRECTORIES(
${PROJECT_SOURCE_DIR}/include
/usr/include/
)
#将程序依赖的库目录引入进来,多个之间空格分离
LINK_DIRECTORIES(/usr/lib /usr/local/lib)
#设置可执行文件输出路径
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#因为这是主CMake文件,引入源码所在目录,需要在该目录下编写CMakeLists.txt文件
ADD_SUBDIRECTORY(src)


src目录下编写子CMakeLists.txt文件

#指定服务名称  与主CMakeLists.txt相同
PROJECT(TestService)
#这个是俺最喜欢的一步,自动检索指定目录下的源码文件并存放到变量SRC_LIST中,简单方便
AUX_SOURCE_DIRECTORY(. SRC_LIST)
AUX_SOURCE_DIRECTORY(./dir SRC_DIR_LIST)
LIST(APPEND SRC_LIST ${SRC_DIR_LIST})
#组成依赖关系,最终将生成TestService可执行文件
ADD_EXECUTABLE(TestService ${SRC_LIST})
#将程序需要的库全部写在这,动态库和静态库皆可 若是系统自带的可以去除lib前缀,如libcurl.so可以直接写成curl
TARGET_LINK_LIBRARIES(TestService libprotobuf.so curl libmemcached.so  libAAA.a)

#下面的这段可以不需要,若要使用make install命令的话就需要在下面指定安装目录,因为大部分部署程序可能是用svn上拉下来的,安装时去除.svn即可,如下面的(PATTERN ".svn" EXCLUDE)
#cmake -DCMAKE_INSTALL_PREFIX=~  ..
SET(INSTALL_DIR "TestService")
INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/../etc
DESTINATION ${INSTALL_DIR}
PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/../var
DESTINATION ${INSTALL_DIR}
PATTERN ".svn" EXCLUDE)
INSTALL(TARGETS TestService
RUNTIME DESTINATION ${INSTALL_DIR}/bin)


写完收工,开始编译

我个人喜欢采用外部编译的方式,所以建了一个build目录

cd  build
cmake .. #该命令将生成makefile文件
make     #开始编译,若你的文件相当多,可以使用make -j命令进行开启多线程编译 速度杠杠的


若你需要部署服务,只要可执行文件和配置文件的话可以加上上面那一块:

#cmake -DCMAKE_INSTALL_PREFIX=~  ..
SET(INSTALL_DIR "TestService")
#部署配置文件
INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/../etc
DESTINATION ${INSTALL_DIR}
PATTERN ".svn" EXCLUDE)
#部署日志文件目录  根据你的需求自适配
INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/../var
DESTINATION ${INSTALL_DIR}
PATTERN ".svn" EXCLUDE)
#部署可执行文件
INSTALL(TARGETS TestService
RUNTIME DESTINATION ${INSTALL_DIR}/bin)


编译命令将会是这样:

cd build
cmake -DCMAKE_INSTALL_PREFIX=~  ..  #CMAKE_INSTALL_PREFIX指定安装目录
make
make install


此时应该满足了大部分需求了,附上一本资料供参考学习
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  配置 结构 系统 下载