处理cmake find模块中的发布/调试库的最佳实践

时间:2015-06-30 12:23:20

标签: windows cmake

我尝试为外部库编写cmake find模块,并在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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

要在vs2012和vs2013版本之间进行选择,您的find-module应该查询变量MSVC11MSVC12

对于其他标志,请参阅Boost find-module for conventions。

我还建议编写一个config-module而不是find-module。