cmake 那些事儿~

8 篇文章 0 订阅

安装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

此时应该满足了大部分需求了,附上一本资料供参考学习

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值