在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查找模块中的约定。

我还建议编写一个config模块,而不是find模块。

最新更新