【问题标题】:Build or-tools 7.1 with cmake使用 cmake 构建 or-tools 7.1
【发布时间】:2021-12-25 22:10:51
【问题描述】:

我正在尝试在 Linux Mint 20 Ulyana(基于 ubuntu 焦点)中使用 cmake (3.16.3) 构建 or-tools 7.1 版

我正在按照这里的说明进行操作https://github.com/google/or-tools/blob/f3fd201e68cf75b7720ff5c3cadc599a1d02b54b/cmake/README.md

首先我运行cmake -H. -Bbuild -G "Unix Makefiles",但由于找不到依赖项而失败,所以我将其替换为cmake -H. -Bbuild -G "Unix Makefiles" -DBUILD_DEPS=ON

但过了一段时间后出现以下错误

[ 55%] No test step for 'Cbc_project'
[ 66%] Completed 'Cbc_project'
[100%] Built target Cbc_project
-- Building Cbc: ...DONE
-- Configuring done
CMake Error at ortools/constraint_solver/CMakeLists.txt:57 (add_dependencies):
  The dependency target "absl::container" of target
  "ortools_constraint_solver" does not exist.


CMake Error at ortools/glop/CMakeLists.txt:50 (add_dependencies):
  The dependency target "absl::container" of target "ortools_glop" does not
  exist.


CMake Error at ortools/linear_solver/CMakeLists.txt:54 (add_dependencies):
  The dependency target "absl::container" of target "ortools_linear_solver"
  does not exist.


CMake Error at ortools/sat/CMakeLists.txt:60 (add_dependencies):
  The dependency target "absl::container" of target "ortools_sat" does not
  exist.


CMake Error at ortools/constraint_solver/CMakeLists.txt:33 (target_compile_options):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_OPTIONS>

  Target "absl::container" not found.


CMake Error at ortools/constraint_solver/CMakeLists.txt:45 (target_compile_definitions):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_DEFINITIONS>

  Target "absl::container" not found.


CMake Error at ortools/constraint_solver/CMakeLists.txt:20 (target_include_directories):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_INCLUDE_DIRECTORIES>

  Target "absl::container" not found.


CMake Error at ortools/constraint_solver/CMakeLists.txt:45 (target_compile_definitions):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_DEFINITIONS>

  Target "absl::container" not found.


CMake Error at ortools/constraint_solver/CMakeLists.txt:20 (target_include_directories):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_INCLUDE_DIRECTORIES>

  Target "absl::container" not found.


CMake Error at ortools/glop/CMakeLists.txt:30 (target_compile_options):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_OPTIONS>

  Target "absl::container" not found.


CMake Error at ortools/glop/CMakeLists.txt:40 (target_compile_definitions):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_DEFINITIONS>

  Target "absl::container" not found.


CMake Error at ortools/glop/CMakeLists.txt:19 (target_include_directories):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_INCLUDE_DIRECTORIES>

  Target "absl::container" not found.


CMake Error at ortools/glop/CMakeLists.txt:40 (target_compile_definitions):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_DEFINITIONS>

  Target "absl::container" not found.


CMake Error at ortools/glop/CMakeLists.txt:19 (target_include_directories):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_INCLUDE_DIRECTORIES>

  Target "absl::container" not found.


CMake Error at ortools/linear_solver/CMakeLists.txt:32 (target_compile_options):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_OPTIONS>

  Target "absl::container" not found.


CMake Error at ortools/linear_solver/CMakeLists.txt:43 (target_compile_definitions):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_DEFINITIONS>

  Target "absl::container" not found.


CMake Error at ortools/linear_solver/CMakeLists.txt:20 (target_include_directories):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_INCLUDE_DIRECTORIES>

  Target "absl::container" not found.


CMake Error at ortools/linear_solver/CMakeLists.txt:43 (target_compile_definitions):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_DEFINITIONS>

  Target "absl::container" not found.


CMake Error at ortools/linear_solver/CMakeLists.txt:20 (target_include_directories):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_INCLUDE_DIRECTORIES>

  Target "absl::container" not found.


CMake Error at ortools/sat/CMakeLists.txt:34 (target_compile_options):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_OPTIONS>

  Target "absl::container" not found.


CMake Error at ortools/sat/CMakeLists.txt:47 (target_compile_definitions):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_DEFINITIONS>

  Target "absl::container" not found.


CMake Error at ortools/sat/CMakeLists.txt:20 (target_include_directories):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_INCLUDE_DIRECTORIES>

  Target "absl::container" not found.


CMake Error at ortools/sat/CMakeLists.txt:47 (target_compile_definitions):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_DEFINITIONS>

  Target "absl::container" not found.


CMake Error at ortools/sat/CMakeLists.txt:20 (target_include_directories):
  Error evaluating generator expression:

    $<TARGET_PROPERTY:absl::container,INTERFACE_INCLUDE_DIRECTORIES>

  Target "absl::container" not found.


-- Generating done
CMake Generate step failed.  Build files cannot be regenerated correctly.

提前谢谢你!

【问题讨论】:

标签: c++ cmake or-tools


【解决方案1】:

CMake 在 7.1 中并未完全实现。

为什么要继续使用 7.1?为什么不在 7.1 中使用 make ?

【讨论】:

  • 是的,我发现 7.1 不完全支持它。我们仍在使用 7.1,因为我们在生产项目中使用该软件,并且我们尚未测试最新版本的性能。上次我们检查 7.3 到 7.6 时,我们的路由性能最低,所以我们现在坚持使用 7.1。我想使用 CMake 来简化我们的 makefile 的维护。
【解决方案2】:

问题是abseil-cpp master 已经放弃了absl::container CMake 目标。

总结 v7.1 中基于 CMake 的构建在使用 -DBUILD_DEPS=ON 构建所有部门时将使用 abseil-cpp 主分支 参考:https://github.com/google/or-tools/blob/f3fd201e68cf75b7720ff5c3cadc599a1d02b54b/cmake/dependencies/CMakeLists.txt#L50-L59

但自 v7.1 发布以来,absl::container 目标已被删除

空的 absl::container 目标已从 CMake 构建中删除。此目标无效,用户代码中对该目标的引用可以安全地删除。 见:https://github.com/abseil/abseil-cpp/releases/tag/20210324.2

一种可能的解决方法是将cmake/dependencies/CMakeLists.txt#L50-L59 中的标签master 更改为20200923.3

但是正如 Laurent 所说,我们强烈建议您使用最新的稳定版本 v9.1

【讨论】:

  • 感谢您的建议,我将对此进行研究,并尝试禁用一些不需要的依赖项并报告我的发现。我不认为我可以完全禁用 abseil-cpp 依赖项,并且带有约束求解器的路由库仍然可以编译并成功运行。我说的对吗?
猜你喜欢
  • 2015-07-05
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
  • 1970-01-01
  • 2016-10-26
  • 2020-02-08
  • 2018-05-31
相关资源
最近更新 更多