我正试图为外部库编写一个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_DEBUG
和IMPORTED_LOCATION_RELEASE
)来自动处理此问题 -
如果查找模块只提供变量,如
CPLEX_LIBRARIES
,则可以使用debug
和optimized
说明符:set(CPLEX_LIBRARIES optimized <path-to-release.lib> debug <path-to-debug.lib>)
要在vs2012和vs2013版本之间进行选择,查找模块应查询变量MSVC11
和MSVC12
。
有关其他标志,请参阅Boost查找模块中的约定。
我还建议编写一个config模块,而不是find模块。