在使用源码编译ceph的时候,碰到了下面的问题,把我整了好几天,让我特别沮丧。问题的背景是:
我使用如下的命令克隆了一份完整的ceph
```
git clonehttps://github.com/ceph/ceph.git
cd ceph
git submodule update --init--recursive
```
然后进行源码编译
```
./do_cmake.sh
cd build
make
```
在make过程中便会遇到如下的问题:
----------
Performing configure step for‘rocksdb_ext’
--JNI library is disabled
CMake Error atCMakeLists.txt:658(install):
install TARGETS given unknown argument"INCLUDES"
CMake Error atCMakeLists.txt:666(install):
install TARGETS given unknown argument"INCLUDES".
--Configuring incomplete,errors occured!
make[2]:***[src/rocksdb_ext-prefix/src/rocksdb_ext-stamap/rocksdb_ext-config]错误1
make[1]:***[src/CMakeFiles/rocksdb_ext.dir/all]错误2
make:***[all] 错误2
----------
我在编译的过程中怎么都无法跳过去这个步骤,然后我怀疑拉的代码不完整,所以重新拉了几分。
拉的ceph源码大小为329888k,即323M,更新完子模块[git submodule update --init --recursive],完整的ceph源码大小为1050164K,即1.1G左右。
每次都这样,这样我就知道ceph源码我克隆的是完整的。
然后通过阅读错误原因
install TARGETS given unknown argument"INCLUDES"
未知参数,通过biying国际版查找错误,发现有可能是cmake的版本问题。在执行rocksdb配置步骤的脚本中src/rocksdb/CMakeLists.txt中,我们可以找到要求的版本号和错误发生的地点。
```
cmake_minimum_required(***VERSION2.8.11***)
project(rocksdb)
if(POLICY CMP0042)
cmake_policy(SET CMP0042 NEW)
endif()
```
install(
TARGETS ${ROCKSDB_STATIC_LIB}
EXPORT RocksDBTargets
COMPONENT devel
ARCHIVE DESTINATION"${CMAKE_INSTALL_LIBDIR}"
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
```
install(
TARGETS ${ROCKSDB_SHARED_LIB}
EXPORT RocksDBTargets
COMPONENT runtime
RUNTIME DESTINATION"${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION"${CMAKE_INSTALL_LIBDIR}"
INCLUDES DESTINATION "${CMAKE_INSTLL_INCLUDE}"
)
```
虽然该脚本要求的是cmake的版本是2.8.11,而我的编译环境也是2.8.11,但其实2.8.11是无法完成编译的,这样我们要通过下面的命令把现有的cmake2.8.11给卸载掉,然后安装cmake2.8.12.这样之后就能顺利编译完整ceph源码了。