在cmake find模块中处理释放/debugging库的最佳实践

我试图编写一个外部库的cmake查找模块,也使这个工作在Windows下。 该库为具有debugging和释放标志(-MD和-MDd)的编译版本以及不同的编译器版本提供了不同的path。 例如,有以下path:

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...) cand 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查找模块的约定。

我也建议写一个配置模块,而不是查找模块。