windows - 在 cmake 查找模块中处理发布/调试库的最佳实践

标签 windows cmake

我正在尝试为外部库编写一个 cmake 查找模块,并使其在 Windows 下运行。对于带有调试和发布标志(-MD 和 -MDd)的编译版本以及不同的编译器版本,该库具有不同的路径。例如有以下路径:

C:/cplex/lib/x86_windows_vs2012/stat_mda/cplex1262.lib
C:/cplex/lib/x86_windows_vs2012/stat_mdd/cplex1262.lib
C:/cplex/lib/x86_windows_vs2013/stat_mda/cplex1262.lib
C:/cplex/lib/x86_windows_vs2013/stat_mdd/cplex1262.lib

在查找模块中处理此问题的最佳做法是什么?

最佳答案

发布和调试版本可以用两种不同的方式处理,具体取决于您是提供 IMPORTED 库还是仅提供 CPLEX_LIBRARIES 变量中的文件列表:

  • 对于 IMPORTED 库,您应该使用 install(...EXPORT...)install(EXPORT ...)通过在 IMPORTED 目标上设置适当的配置相关属性自动处理此问题的命令(例如 IMPORTED_LOCATION_DEBUGIMPORTED_LOCATION_RELEASE)
  • 如果您的查找模块仅提供变量,例如 CPLEX_LIBRARIES,您可以使用 debugoptimized 说明符:

    set(CPLEX_LIBRARIES optimized <path-to-release.lib> debug <path-to-debug.lib>)
    

要在 vs2012 和 vs2013 版本之间进行选择,您的查找模块应该查询变量 MSVC11MSVC12

对于其他标志,请参阅约定的 Boost 查找模块。

我还建议编写配置模块而不是查找模块。

关于windows - 在 cmake 查找模块中处理发布/调试库的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31138220/

相关文章:

CMake 使用 copy_if_ Different 递归复制文件

windows - 我如何在windows平台下使用gtk和cmake?

android - 使用 CMake 为 Android 配置 Qt5 5.7 应用程序

java - 以编程方式重新启动可作为 Windows 服务运行的 Java 应用程序

windows - 在 LAN 中的系统上设置和查找 svn 存储库

c# - NO ACTIVATE 窗口样式

c++ - 在 cmake 中包含 cmake 头文件 boost.hpp

cmake - 使用 Ninja Multi-Config cmake 生成器时处理 `CMAKE_INSTALL_PREFIX` 的正确方法是什么?

windows - 无法在Windows中启动rabbitmq管理控制台

windows - 将批处理文件 ECHO 传递到 PUSHD 命令提示符命令中