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
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
此时应该满足了大部分需求了,附上一本资料供参考学习
相关文章推荐
- Scrapy的架构介绍
- [原创]java局域网聊天系统
- 发布一个自己做的jsp博客系统
- [游戏资讯]《极品飞车16:亡命狂飙》配置需求公布
- 注册表的组织结构
- 路由器备份配置
- 提供个 全免杀海洋2006asp木马 下载
- 高手写的Tracer-Flash代码调试类代码下载
- Windows 系统组策略应用全攻略(下)第1/3页
- Vista 防火墙 Vista Firewall Control v1.0.11 下载
- 国外Lightbox v2.03.3 最新版 下载
- 路由器的基本配置
- 路由器基础配置及传输协议
- 经典配置 Vlan篇
- 备份线路的配置
- 火影漫画下载助手 下载
- USBkill U盘防火墙 v3.0 下载
- 腾讯 Tencent Traveler v3.4 下载
- 查杀软件 360安全卫士 v3.2.1.1001 下载