【发布时间】:2015-04-30 14:55:46
【问题描述】:
CMake 3.2.2 的文档指出,可以将生成器表达式用于install(<FILES|PROGRAMS> ...) 签名。我试图在install() 的其他签名中使用生成器表达式,但显然它不起作用。我想做这样的事情:
install(TARGETS foo EXPORT fooConfig
RUNTIME DESTINATION "Bin/$<CONFIG>"
LIBRARY DESTINATION "Lib/$<CONFIG>"
ARCHIVE DESTINATION "Lib/$<CONFIG>"
我也尝试过多次这样调用install():
install(TARGETS foo EXPORT fooConfig
RUNTIME DESTINATION "Bin/Debug" CONFIGURATIONS Debug
LIBRARY DESTINATION "Lib/Debug" CONFIGURATIONS Debug
ARCHIVE DESTINATION "Lib/Debug" CONFIGURATIONS Debug
install(TARGETS foo EXPORT fooConfig
RUNTIME DESTINATION "Bin/Release" CONFIGURATIONS Release
LIBRARY DESTINATION "Lib/Release" CONFIGURATIONS Release
ARCHIVE DESTINATION "Lib/Release" CONFIGURATIONS Release
install(TARGETS foo EXPORT fooConfig
RUNTIME DESTINATION "Bin/MinSizeRel" CONFIGURATIONS MinSizeRel
LIBRARY DESTINATION "Lib/MinSizeRel" CONFIGURATIONS MinSizeRel
ARCHIVE DESTINATION "Lib/MinSizeRel" CONFIGURATIONS MinSizeRel
install(TARGETS foo EXPORT fooConfig
RUNTIME DESTINATION "Bin/RelWithDebInfo" CONFIGURATIONS RelWithDebInfo
LIBRARY DESTINATION "Lib/RelWithDebInfo" CONFIGURATIONS RelWithDebInfo
ARCHIVE DESTINATION "Lib/RelWithDebInfo" CONFIGURATIONS RelWithDebInfo
这会导致 CMake 发出错误,类似于 在 'fooConfig' 中多次导出目标 'foo'。
如果不更新 CMake 缓存并重新运行构建,我也无法在此处使用 CMAKE_BUILD_TYPE。而不是这样,我想使用 Visual Studio 批量构建功能,它为我构建多个配置。
我也尝试了一个小技巧。我注意到 CMake 生成的INSTALL 项目只是简单地调用带有参数-DBUILD_TYPE=$(Configuration) 的CMake 脚本${CMAKE_BINARY_DIR}/cmake_install.cmake。所以我尝试了以下方法:
install(TARGETS foo EXPORT fooConfig
RUNTIME DESTINATION "Bin/\${BUILD_TYPE}"
LIBRARY DESTINATION "Lib/\${BUILD_TYPE}"
ARCHIVE DESTINATION "Lib/\${BUILD_TYPE}"
这实际上对安装很有效。但是,已安装的导出脚本,即install(EXPORT fooConfig DESTINATION .) 的输出现在也尝试使用${BUILD_TYPE},在用户包含该脚本时未设置...
如果有人知道实现我目标的另一种方法,请告诉我。
【问题讨论】:
标签: cmake