Slax是个非常优秀的Linux发行版,之前说过了,也介绍过制作Slax Bundle的buildscript书写。
但是我今天在编译rekonq的时候遇到了点麻烦,一直提示出错,跑到IRC上#rekonq频道询问,人家告诉我是少了ksgmltools2,确实少了。我发邮件告诉Tomas M(Slax作者),这位仁兄告诉我Slax是特意去除这个组件的,并告诉我要在buildscript里对CMakeLists.txt打一下“补丁”,让程序编译过程去除掉Documentation(文档),这么一来我的rekonq终于编译成功了!
去除文档的办法,是删掉CMakeLists.txt中的ADD_SUBDIRECTORY( doc ),当然我知道可以用文本编辑器去删掉,问题是您要写的是一个脚本在服务器上运行的,所以要用到一些简单的shell脚本来操作,相关行我贴在这里。
cd ${SLAX_BUNDLE_NAME}-${SLAX_BUNDLE_VERSION}
find | grep CMakeLists.txt | while read LINE; do
cat "$LINE" | fgrep -v "add_subdirectory( doc )"
| fgrep -v "add_subdirectory(doc)"
| fgrep -v "add_subdirectory (doc)"
| fgrep -v "add_subdirectory ( doc )"
| fgrep -v "ADD_SUBDIRECTORY( doc )" >aaa
mv aaa "$LINE"
done
另外一个需要注意的事情,就是对于cmake编译安装的软件,需要在cmake参数里加上 -DLIB_SUFFIX=”${SLAX_64_FLAG}” ,不然在64位系统中也会把libraries安装到/usr/lib而不是/usr/lib64,程序无法找到lib的情况。所以这点千万切记要加上这个参数。
2013/02/06补充:(根据Michal发给我的邮件正文,下面详细贴出buildscript软件编译部分的正确示例)
1) 当使用./configure时,
CFLAGS="${SLAX_CFLAGS}" CXXFLAGS="${SLAX_CFLAGS}" ./configure ${SLAX_CONFIGURE_OPTIONS}
2) 当使用cmake时(假定先执行了mkdir build && cd build了),
cmake -DCMAKE_C_FLAGS:STRING="${SLAX_CFLAGS}"
-DCMAKE_CXX_FLAGS:STRING="${SLAX_CFLAGS}"
-DCMAKE_INSTALL_PREFIX=/usr
-DINCLUDE_INSTALL_DIR=/usr/include
-DCMAKE_BUILD_TYPE=Release
-DLIB_SUFFIX=${SLAX_64_FLAG}
-DLIB_INSTALL_DIR="${SLAX_LIBDIR}"
..
3) 当制作商业闭源软件的Bundle时,必须准备好32位和64位两份预编译包。
if [ "${SLAX_64_FLAG}" = "64" ]; then
#将64位预编译文件安装到 ${SLAX_BUNDLE_TARGET}
else
# 将32位预编译文件安装到 ${SLAX_BUNDLE_TARGET}
fi
如此才能确保服务器根据buildscript编译出来的Slax Bundle正确。