使用 CMake 管理程序项目真的很方便,现在感觉 CMake 已经是编程的一部分一样。

上次说的数字图象处理的实现,当然也是使用 CMake 进行管理。

然而编着编着,却觉得把源码全放在一个目录里是件很恼人的事情,同时也不利于测试和再利用,于是产生了把 BMP 相关类作成一个动态链接库的想法。

CMake 做到这一点很简单。

首先,把所有要做成库的源代码放在一个目录里,比如我这里叫做 bmp_pixmap ,然后在这个目录下建立 CMakeLists.txt,加入以下内容:

SET (SRC_LIST bmp_info_header bmp_file_header bmp_pixel bmp_pixmap bmp_pixmap_fill bmp_pixmap_noise_salt_pepper)
ADD_LIBRARY (bmp_pixmap SHARED ${SRC_LIST})

其中 SRC_LIST 是源文件列表,bmp_pixmap 是库的名称,也就是 libbmp_pixmap,SHARED 表示动态库,静态的话只需要改成 STATIC 即可。

然后,对于调用动态库的源文件 main.cpp 所在的目录,比如我这里是 bmp_pixmap 目录的上级目录 src ,也要建立一个 CMakeLists.txt,加入以下内容:

ADD_SUBDIRECTORY (bmp_pixmap)
LINK_DIRECTORIES (bmp_pixmap)
SET (SRC_LIST main)
ADD_EXECUTABLE (main ${SRC_LIST})
TARGET_LINK_LIBRARIES (main bmp_pixmap)

因为 src 是 bmp_pixmap 的父目录,所以加上 ADD_SUBDIRECTORY 指令,LINK_DIRECTORIES 则指明链接库所在位置,TARGET_LINK_LIBRARIES 表示对目标 main 链接 libbmp_pixmap 这个库。

最后,项目根目录下的 CMakeLists.txt 是这样的:

CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
PROJECT (DIP)
ADD_SUBDIRECTORY (src bin)
ADD_SUBDIRECTORY (config)

这样就可以编译了。

可见,CMake 管理项目所需要写的配置文件十分之少,常用的命令也就那么几个,相比 AutoTools ,实在可以说是极度傻瓜化了……

用 CMake ,我骄傲哇~

评论