我尝试为外部库编写cmake find模块,并在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
在find模块中处理此问题的最佳做法是什么?
答案 0 :(得分:3)
发布和调试版本可以通过两种不同的方式处理,具体取决于您是在IMPORTED
变量中提供CPLEX_LIBRARIES
库还是仅提供文件列表:
IMPORTED
库,您应该使用install(...EXPORT...)
cand install(EXPORT ...)
命令,通过在IMPORTED
目标上设置相应的配置相关属性来自动处理此问题(例如, IMPORTED_LOCATION_DEBUG
和IMPORTED_LOCATION_RELEASE
)如果您的find-module仅提供变量,例如CPLEX_LIBRARIES
,您可以使用debug
和optimized
说明符:
set(CPLEX_LIBRARIES optimized <path-to-release.lib> debug <path-to-debug.lib>)
要在vs2012和vs2013版本之间进行选择,您的find-module应该查询变量MSVC11
和MSVC12
。
对于其他标志,请参阅Boost find-module for conventions。
我还建议编写一个config-module而不是find-module。