安装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
此时应该满足了大部分需求了,附上一本资料供参考学习