如何使用cmake将gecode作为外部库包含在我的c ++项目中?

时间:2019-07-29 08:49:12

标签: linux cmake gecode

我是CMake的新手,并且需要一个简单问题的一些指导:我按照this link在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)

error message when "make" the c++ project

my current non-working CmakeLists.txt

2 个答案:

答案 0 :(得分:1)

Gecode是一个相当复杂的库,具有各种“子库”或组件,因此我想提供一种替代方法,可以直接在CMake文件中添加find和link命令。

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

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

# 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_DIRSGECODE_LIBRARIES。但是,如果您随后将库导出为CMake包,则可能会给您带来麻烦。

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

答案 1 :(得分:0)

我想出了一个有效的版本,CmakeLists.txt如下图所示: enter image description here