[BuildRelease]跨平台构建工具Cmake
一 CMake
CMake 是一个跨平台的构建工具,通过一次的cmake script的编写,能够生成常见平台常见IDE的project文件或maikefile文件,例如生成visual studio project文件,eclipse project文件,makefile等;同时相对于linux的automake工具生成makefile的过程相对简单。
参考:http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/index.html
Eclipse 插件:http://www.cthing.com/CMakeEd.asp
二 特点:
1)配置文件是cmake script,cmake script是特定于software build的专用编程语言;
2)内置的对c,c++,java,fortran的依赖的分析;
3)通过cmake script支持swig,qt,fltk;
4)支持几乎所有的IDE工程文件或makefile的生成,例如visual studio 6-10,eclipse cdt等;
6)使用传统的时间戳来检测文件内容的改变;
7)支持并行build;
8)依赖的globle view,可以使用cmake产生依赖图;
9)支持cross compiler。
10)支持几乎所有的平台;
11)与ctest,cpack,cdash 集成;
三 CMake的generators
1)cmake在windows上的generator的列表:
2) Linux下generator:
Unix Makefiles = Generates standard UNIX makefiles.
CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
Eclipse CDT4 - Unix Makefiles = Generates Eclipse CDT 4.0 project files.
KDevelop3 = Generates KDevelop 3 project files.
KDevelop3 - Unix Makefiles = Generates KDevelop 3 project files.
3)参考:http://www.cmake.org/Wiki/CMake_Generator_Specific_Information
四 实例
1)过程简单描述
# 编写 CmakeLists.txt。
# 执行命令 “cmake PATH” 生成 Makefile ( PATH 是 CMakeLists.txt 所在的目录 )。
# 使用 make 命令进行编译。
2)简单实例(在windows上编译sample工程)
1】实例文件结构如下:
2】main.cpp如下:
int main()
{
std::cout<<"Hello word!"<<std::endl;
return 0;
}
3】Cmakelists.txt如下:
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. DIR_SRCS)
add_executable(Sample ${DIR_SRCS})
4】cmakefiles.txt的解释:
"#"后面的内容为注释。
命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。
PROJECT(sample)命令用来表示项目名称为smaple。
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)用来限定需要cmake2.6的版本。
aux_source_directory(<dir> <variable>)该命令会把参数 <dir> 中所有的源文件名称赋值给参数 <variable>。
ADD_EXECUTABLE(sample ${DIR_SRCS})表示将变量 DIR_SRCS 中的源文件编译成一个名称为sample的可执行文件。
5】生成VS工程文件和build如下:
6】生成Eclipse+MinGW的工程文件如下:
五语法
ADD_SUBDIRECTORY( src )指明本项目包含一个子目录 src 。
TARGET_LINK_LIBRARIES( main Test )指明可执行文件 main 需要连接一个名为Test的链接库 。
六参考
http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/
http://en.wikipedia.org/wiki/CMake
完!