我正在尝试为外部库编写一个 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 查找模块。
我还建议编写配置模块而不是查找模块。
关于windows - 在 cmake 查找模块中处理发布/调试库的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31138220/