1

我想在我的项目中构建 gflags 和 glog。下面你会看到代码。我几乎可以编译,但由于一些兼容性错误,我会遇到不同的致命错误,具体取决于我尝试在哪个 glog 版本中使用的 gflags 版本。如图所示,我看到了错误

./src/glog/stl_logging.h:56:11: fatal error: 'ext/slist' file not found
# include <ext/slist>" )

我找到了自豪的信息

现在 glog 围绕标志的 ABI 与 gflags 兼容

在现场,宣布 glog 0.3.3 https://code.google.com/p/google-glog/

但我无法弄清楚哪个版本的 gflags。(我觉得很奇怪,因为 glog 依赖于 gflags)

# Install GFlags
ExternalProject_Add(
    GFlagsLib
    URL https://github.com/gflags/gflags/archive/master.zip
    CONFIGURE_COMMAND <SOURCE_DIR>/configure  --prefix=<INSTALL_DIR>
    )
ExternalProject_Get_Property(GFlagsLib install_dir)
include_directories(${install_dir}/include)
set(GFLAGS_LIBRARIES ${install_dir}/lib/libgflags.${link_library_suffix})
set(GFLAGS_PREFIX ${install_dir})

# Install GLog
ExternalProject_Add(
    GLogLib
    URL http://google-glog.googlecode.com/files/glog-0.3.3.tar.gz
    CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --with-gflags=${GFLAGS_PREFIX}
    )
ExternalProject_Get_Property(GLogLib install_dir)
4

1 回答 1

0

我知道这是一个老问题,但我想我会试一试,以防未来的人们有类似的问题。首先,看起来您正在从 GitHub 中提取 gflags,从旧的 Google Code 托管站点中提取 glog。在发布问题时,glog 已经移至 GitHub 并发布了更新版本(0.3.4)。这可能是不兼容的原因。

接下来,虽然 CMake 的ExternalProject_Add()功能对包管理很有用,但它通常会导致必须滚动您自己的find_package()via版本ExternalProject_Get_Property()来识别后续目标的标头和库位置。正如你所看到的,我也经历过同样的头痛,它会变得相当脆弱。

最近我开始使用Hunter 包管理器来处理 C++ 项目中的依赖项,我可以推荐它作为一个很好的选择。我已经在我自己的项目中将它用于 gflags、glog 和其他库。每个 Hunter 版本都会锁定包版本(通过HunterGate()使用适当参数的调用)以帮助确保成功且可重复的构建。

也许由于 Python (pip) 和 Node.js (npm) 的竞争,C++ 包管理总体上最近有了很大的改进。如果您有兴趣,还应该看看 Conan.io(来自 JFrog)和 Buckaroo(来自 Facebook)。

于 2017-07-27T04:06:47.210 回答