0

我是 CMake 新手,在一个简单的问题上需要一些指导:我通过以下链接在我的 Ubuntu 18.04 机器中从源代码构建 gecode 。该库安装在/opt/gecode-release-6.2.0目录中。我有一个 C++ 简单项目,其源代码使用 gecode 库函数,并且该项目是使用 CMake 构建的。但是,计算机似乎找不到安装 gecode 的位置。

我已经尝试了以下方法,CMakeLists.txt希望可以正确定位 gecode 库,但没有一个有效:

  • include_directories(${LD_LIBRARY_PATH})
  • find_library(GECODE_LIB gecode)
  • link_directories(${LD_LIBRARY_PATH})
  • include_directories(/opt/gecode-release-6.2.0)

“制作” C++ 项目时出现错误消息

我当前无法正常工作的 CmakeLists.txt

4

2 回答 2

1

Gecode 是一个相当复杂的库,其中包含各种“子库”或组件,因此我想提供一种替代方法来直接在 CMake 文件中添加查找和链接命令。

Gecode 可以用作单独的CMake 包。我不会详细说明这意味着什么,但是一旦您将 Gecode 定义为一个包,您就可以使用该find_package()函数来查找并链接到 Gecode(例如,find_package(Gecode 6.0 COMPONENTS Driver Kernel)至少需要 Gecode 版本 6 并且需要驱动程序和内核组件)。由于 Gecode 不作为 CMake 包发布,因此要将 Gecode 视为一个包,您必须定义一个查找模块。可以在 MiniZinc 存储库中找到一个功能齐全的 gecode 查找模块:https ://github.com/MiniZinc/libminizinc/blob/master/cmake/modules/FindGecode.cmake 这个查找模块将包含查找 Gecode 的说明,并将使用库所在位置和相关头文件的信息定义导入的目标和变量。

将目标与 Gecode 链接的简单示例test如下所示:

# Add the place of the find module to the module path
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
# Find Gecode
find_package(Gecode 6.0 REQUIRED COMPONENTS Driver Int Kernel Search)
# Link Gecode to target test
target_link_libraries(test Gecode::Driver Gecode::Int Gecode::Kernel Gecode::Search)

请注意,所需的组件将根据您的应用程序而有所不同。也可以使用find 模块定义的GECODE_INCLUDE_DIRSand ;GECODE_LIBRARIES但是,如果您随后将库导出为 CMake 包,这可能会给您带来问题。

免责声明:我目前维护 MiniZinc 项目的 CMake 设置。

于 2019-07-30T00:33:24.237 回答
0

我想出了一个工作版本,CmakeLists.txt 如下图所示: 在此处输入图像描述

于 2019-07-29T10:07:57.290 回答