cmake使用(一)

cmake使用


  手工写Makefile是一件很有趣的事情,但是对于比较大型的项目,面对几百个文件,再使用手工管理makefile文件就是一种痛苦了。这大概就是佛说的三苦之一吧!
  关于makefile文件,基本上有两种模式管理,第一就是使用自动编写工具(如:autotools,cmake)管理,第二就是使用可视化IDE(如:Visualstudio,cdoeblocks,devc++)管理。
  可视化IDE是最简单的,但是也是最臃肿的,可移植性也是最差的。因此对于专业人员来说生成一个可适应最多环境的文本文件是最佳的处理办法。
  GNU Autotool是最早的工具软件,也是unix系列平台上的标准工具。cmake是为了解决autotools的痛点而生的,并且兼顾了 windows平台。
  Autotools在UNIX系统开发环境中是一系列工具, 它主要由autoconf、automake、perl语言环境和m4等组成;所包含的命令有五个:(1)aclocal(2)autoscan(3)autoconf(4)autoheader(5)automake。看到这么多的命令,是不是大家马上就有一种繁琐的感觉。确实,不仅繁琐,这些命令还会在你的源代码目录中生成一堆临时文件,让你不胜其烦。
  cmake却很明了,在应用根目录中只需要一个CmakeList.txt文件。生成的中间文件可以放到一个专门的目录中,不干扰你备份和审阅源代码。
  首先是常用开发的目录结构示例:
/srv //这是最新的Debian发行版建议的用户应用程序的存放位置
/srv/exsrv //exsrv是我们自行定义的应用程序的目录
/srv/exsrv/src //src就是我们常用的源代码的存放位置
/srv/exsrv/build //这是编译后的可执行文件存放的位置,也是cmake生成的中间文件的存放位置
/srv/exsrv/lib //外部或自行生成的静态库文件存放位置
  下面这份cmake的示例是一个最常用的开发模式的模板,很多时候你复制到你的源代码目录,稍加修改即可使用,记得命名为CMakeLists.txt,放在你的目录/srv/exsrv/中。

cmake_minimum_required(VERSION 2.68)
project(exsrv)
include_directories(
         /usr/local/include/
         /usr/local/libuv/include 
         )
include_directories(
        ${CMAKE_CURRENT_SOURCE_DIR}/src/include
        ) 
aux_source_directory(src/. DIR_SRCS)
#以下两句可以使用find_library()取代
#link_directories(${RUNTIME_LIB})    #此处就是cc中的-L后的参数
#link_libraries(uv)       #此处不可以写为libuv,实际上与cc中的 -l用法一致
#LINK_LIBRARY似乎是一个需要避免的命令, 取而代之的是FIND_LIBRARY
find_library(RUNTIME_LIB uv /usr/local/lib /usr/local/libuv/lib
NO_DEFAULT_PATH)
add_executable(${PROJECT_NAME} ${DIR_SRCS})
target_link_libraries(${PROJECT_NAME} ${RUNTIME_LIB})

  除了文件中注释部分的解释外,有几点需要特别说明一下:
1、本工程是一个简单的编译Liigo的libuv示例的tinyweb程序的工程,需要外部依赖库libuv.so
2、include_directories(
/usr/local/include/
/usr/local/libuv/include
)
  这里为什么要包含两个目录,是因为在freebsd和linux两个平台,通过缺省方式安装libuv后,libuv在两个平台安装的位置不同,为了兼容两个平台所以把两个路径都包含进来。
  关于cmake的详细用法,请参考https://www.cnblogs.com/binbinjx/p/5626916.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值