A-A+

修改cmake脚本实现组件打包

2014年04月13日 TenDB 暂无评论

在TMySQL1.3中,要把增加的外部库libtcmalloc_minimal.so包含在使用make package打的tar包里面。TMySQL1.3是使用cmake脚本作为源码的编译方式,这样可以统一所有平台的编译(window、unix、solaris等)。因此,增加对外部库的打包,就是通过修改cmake文件来完成。

本处只是让一个外部组件包含在在make package的打包结果中,故只须专注相关部分就可以。

要最快的实现组件打包,那么只用找到现在的文件打包方式,然后“照猫画虎”即可以。最直观的,使用grep ‘make package’ * -r, 查看有无make package直接相关的代码或者说明。结果如下:

clip_image002

感觉CMakeLists.txt应该是我们的目标,经确认在BUILD-CMAKE、INSTALL-SOURCE及Docs/mysql.info中,只有关于make package的用法说明。

打开CmakeLists.txt,内容如下:

clip_image004

除上述内容外,还有很类似的INSTTALL命令的实现。从注释中可以看出,此处的代码就是确定将哪些文件打包到最终的.tar中。从前面的INSTALL-SOURCE中的说明中得知SET(CPACK_MONOLITHIC_INSTALL 1 CACHE INTERNAL "")命令是将make package的结果打成一个.tar文件(设置为0时则打包成多个文件)。

猜测在此处按INSTALL格式增加代码,然后加入我们的组件库即可实现组件的打包。于是在GCS-SQL的CmakeLists.txt下的增加如下代码:

clip_image006

经过make package进行测试,猜测得比较准,组件成功打包到.tar.gz中。

下面进一步分析make package的原理。

在上述代码中,只有INSTALL逻辑,却没有看到生成.tar.gz的代码。Make package的结果却是一个tar包。通过grep文件中的.tar.gz,可以在cmake/make_dist.cmake.in中找到如下代码:

clip_image008

进一步查找CPACK_SOURCE_PACKAGE_FILE_NAME,可以看到这个就是带版本信息的.tar.gz名。而CPACK_SOURCE_PACKAGE_FILE_NAME则是CMAKE_BINARY_DIR下的一个文件夹。在代码中可以看到一系列的CONFIGURE_FILE操作,其作用就是拷贝配置文件及文档到CMAKE_BINARY_DIR/CPACK_SOURCE_PACKAGE_FILE_NAME下,最终通过tar打包。

其中要注意的make install与make package的关系。在make package中,最终操作是进行tar,但是被打包的内容是什么呢?

通过.tar.gz进行逆向追踪,可以发现打包的内容都是由make install得到的。即执行make packeage命令时,首先执行了make install,即将内容install到文件夹CPACK_SOURCE_PACKAGE_FILE_NAME下,然后再将GCS-SQL中存在的配置的信息拷贝进来,再完成tar cvf操作。

在执行make package或者make install后,bld目录下都会生成文件install_mainfest.txt,该文件记录了make install过程生成的文件存放路径。该路径也可以看到install过程中会把内容生成到CPACK_SOURCE_PACKAGE_FILE_NAME下。

Install_mainfest.txt内容示例如下:

clip_image010

在目录/GCS-SQL/bld/_CPack_Packages/Linux/TGZ下可以看到如下内容,

clip_image012

上述截图也可以证明make packeage过程,执行make install将文件生成到CPACK_SOURCE_PACKAGE_FILE_NAME下,最后完成一个tar cvf操作,即实现了make package.

另外,在逆向追踪的过程中,发现TMySQL1.3中的mysqllib也会生成链接库,并通过INSTALL将库文件放在了INSTALL_LIBDIR(即lib目录)下面,进一步确认了上述的猜测。同时,也可以将我们增加的代码放到mysqlib目录下的CmakeLists.txt中。

原创文章,转载请注明: 转载自腾讯游戏DBA团队

本文链接地址: 修改cmake脚本实现组件打包

文章的脚注信息由WordPress的wp-posturl插件自动生成

标签:
Copyright © 腾讯游戏DBA团队 保留所有权利.  

用户登录

分享到: