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_DIRS
and ;GECODE_LIBRARIES
但是,如果您随后将库导出为 CMake 包,这可能会给您带来问题。
免责声明:我目前维护 MiniZinc 项目的 CMake 设置。