【发布时间】:2020-02-09 21:15:15
【问题描述】:
我试图弄清楚如何根据 cmake 中的配置复制一些库。
我试过了:
add_custom_command(TARGET Myapp
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<$<CONFIG:Debug>:${_LIBS_DEBUG}>
$<$<CONFIG:Release>:${_LIBS_RELEASE}>
$<TARGET_FILE_DIR:MyApp>)
它在 Debug 中复制库,但在 release 中不复制:
- 这应该是合法的并且应该有效吗?
- 如果不合法(我没有收到错误),我怎样才能达到同样的效果?
【问题讨论】:
-
如果
_LIBS...只包含一个文件,对我来说看起来是合法的。如果没有在add_custom_command()周围添加foreach()循环。我们谈论makefile环境吗?因为你例如需要知道默认配置只是空的。能否请您添加用于生成构建环境的命令行?或者,这些库是否也使用 CMake 构建?然后你可以有一个通用的_LIBS列表,其中包含像$<TARGET_FILE:libA>这样的生成器表达式。 -
我的命令行是针对 Visual Studio 的,所以里面没有 -DCMAKE_BUILD_TYPE。我正在用 CMake 编译一组 46 个项目,但我要安装的库只是指向库的字符串,而不是我项目的一部分。
-
感谢您提供更多信息。只是一个猜测:您是否尝试过删除两个生成器表达式之间的空格/换行符?我通常用来调试这些情况的方法是在有问题的实际行之前添加另一个
COMMAND,它只是回显命令行。在你的情况下COMMAND ${CMAKE_COMMAND} -E echo $<$<CONFIG:Debug>:${_LIBS_DEBUG}>$<$<CONFIG:Release>:${_LIBS_RELEASE}> $<TARGET_FILE_DIR:MyApp>。也许还添加一个COMMAND ${CMAKE_COMMAND} -E echo Copying libs for config $<CONFIG>来验证配置的名称。