【发布时间】:2019-09-19 19:00:39
【问题描述】:
我有使用 cmake 构建的 c++ 代码。我写了一个类,它依赖于一个名为 Gurobi 的库。 Gurobi 的竞争对手之一是 CPLEX,这是另一个允许类似优化任务的库。我必须为一个研究项目重写我在 CPLEX 中的课程(因为我们的资金来自一个只能访问 CPLEX 的机构)。因此,我想更改我的 cmake 文件,以便它查找 Gurobi 和 CPLEX,如果找到 Gurobi,则使用 GurobiClass.cpp 文件编译我的代码,如果找到 cplex,则使用 CPLEX.cpp 文件。
我基本上是在问如何在编译步骤中忽略代码,这样用户就不必同时拥有两个库来编译我的代码。
我确定已经有人问过这个问题,但我不确定这个问题的正确名称是什么/要搜索什么,所以我再次问这个问题,但请随时向我指出在线资源。
感谢您提供的任何帮助!
【问题讨论】:
-
在 cmake 中你可以找到库并检查是否安装了这个库。根据此状态,您可以设置宏。见cmake.org/cmake/help/latest/command/find_package.html
-
您的 CMake 如何找到这些外部库(CPLEX 和 Gurobi)?您是在使用
find_package(),对预建库的硬编码路径,使用add_subdirectory(),还是其他?当您没有提供一些示例代码时,很难提出解决方案。