1 abseil是做什么的
Abseil是C ++库代码的开源集合,旨在增强C ++标准库。Abseil库代码是从Google自己的C ++代码库中收集的,已经过广泛测试并在生产中使用,并且与我们日常编码工作中所依赖的代码相同。
在某些情况下,Abseil提供了C ++标准中缺少的内容;在其他情况下,Abseil提供了针对标准的替代方法,以满足我们通过在Google代码库中的使用而发现的特殊需求。我们会在我们提供给您的库代码中清楚地表示这些情况。Abseil并不意味着要成为标准库的竞争对手。
参见:如何评价 Google 开源其 C++ 基础库 Abseil?
2 在编译的时候遇到abseil错误怎么办
multiple rules generate abseil
等其他与abseil相关的错误
这里参照:cartographer中abseil库依赖改造
cartographer中abseil的原生在线依赖
cartographer/blob/master/cmake/modules/FindAbseil.cmake#L66
ExternalProject_Add(${ABSEIL_PROJECT_NAME}
PREFIX ${ABSEIL_PROJECT_NAME}
GIT_REPOSITORY https://github.com/abseil/abseil-cpp.git
GIT_TAG 7b46e1d31a6b08b1c6da2a13e7b151a20446fa07
INSTALL_COMMAND ""
BUILD_COMMAND ${CMAKE_COMMAND} --build "${ABSEIL_PROJECT_BUILD_DIR}"
CMAKE_CACHE_ARGS "-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON;-DBUILD_TESTING:BOOL=OFF;-DCMAKE_BUILD_TYPE:STRING=Release"
BUILD_BYPRODUCTS "${ABSEIL_LIBRARY_PATH};${ABSEIL_DEPENDENT_LIBRARIES}"
)
会在ros的工作空间下的build_isolated下下载编译,并最后安装在install_isolated, carto_grapher_ros会依赖它。
3 记录 :
1 安装abseil
set -o errexit
set -o verbose
git clone https://github.com/abseil/abseil-cpp.git
cd abseil-cpp
git checkout d902eb869bcfacc1bad14933ed9af4bed006d481
mkdir build
cd build
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl \
..
ninja
sudo ninja install
cd /usr/local/stow
sudo stow absl
2 cartographer中
/src/cartographer/CMakeLists.txt
CMakeList.txt 第1处:
find_package(Abseil REQUIRED) --> find_package(absl REQUIRED)
CMakeList.txt 第2处:#默认的库文件是 standalone_absl
target_link_libraries(${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY}
absl::base
absl::synchronization
absl::strings
absl::flat_hash_map
absl::numeric
absl::flags)
/src/cartographer/cartographer-config.cmake.in 1处
find_package(Abseil ${QUIET_OR_REQUIRED_OPTION}) Abseil 改为 absl
3 cartographer_ros中
/src/cartographer_ros/cartographer_ros/CMakeLists.txt
find_package(Abseil REQUIRED) -->find_package(absl REQUIRED)
4 cartographer_rviz中
/src/cartographer_ros/cartographer_rviz/CMakeLists.txt
find_package(Abseil REQUIRED) -->find_package(absl REQUIRED)
4
重新编译
另外如果在package里面想要调用同workspace其他的package
1.在Cmakelists.txt 里面
set(PACKAGE_DEPENDENCIES
xxxx
)
2.在package.xml中
<depend>xxxx</depend>