我试图编写一个外部库的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_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查找模块的约定。
我也建议写一个配置模块,而不是查找模块。