Linux 如何在my c+中将gecode作为外部库包括在内+;使用cmake的项目?

Linux 如何在my c+中将gecode作为外部库包括在内+;使用cmake的项目?,linux,cmake,gecode,Linux,Cmake,Gecode,我是CMake的新手,需要一些关于一个简单问题的指导:我在我的Ubuntu18.04机器上通过以下方式从源代码构建gecode。该库安装在/opt/gecode-release-6.2.0目录中。我有一个C++的简单项目,其源代码使用GeCod库函数,并且项目使用CMADE构建。然而,计算机似乎找不到gecode的安装位置 我在我的CMakeLists.txt中尝试了以下操作,希望能够正确定位gecode库,但没有一个正常工作: 包含目录(${LD\u LIBRARY\u PATH}) 查找库

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

我在我的
CMakeLists.txt中尝试了以下操作,希望能够正确定位gecode库,但没有一个正常工作:

  • 包含目录(${LD\u LIBRARY\u PATH})
  • 查找库(GECODE\u LIB GECODE)
  • link\u目录(${LD\u LIBRARY\u PATH})
  • 包括目录(/opt/gecode-release-6.2.0)


我已经找到了一个工作版本,CmakeLists.txt如下图所示:

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

Gecode可以作为单独的代码使用。我不会详细说明这意味着什么,但一旦您将Gecode定义为一个包,您就可以使用
find_package()
函数查找并链接到Gecode(例如,
find_package(Gecode 6.0组件驱动程序内核)
至少需要Gecode版本6,并且需要驱动程序和内核组件)。由于Gecode不是作为CMake包提供的,所以要将Gecode作为包处理,必须定义一个find模块。可在Minizing存储库中找到完整功能的gecode查找模块: 该查找模块将提供查找Gecode的说明,并使用库所在位置和相关头文件的信息定义导入的目标和变量

将目标
测试
与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\u INCLUDE\u DIRS
GECODE\u库
;但是,如果随后将库导出为CMake包,则可能会出现问题


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

请将错误消息和CMakeLists.txt内容粘贴到此处。托管在其他地方的图片将来可能会消失。您需要调用目录
include_directories
,其中包含丢失的标题(如错误消息中所述)。请注意,环境变量
LD_LIBRARY_PATH
与include目录没有任何共同之处。和
find_library
搜索库,而不是头文件。与问题帖子的问题相同:不要用代码发布图像。相反,将代码(作为文本)添加到帖子本身。