使用Ninja Multi-Config CMAKE生成器时,处理"CMAKE_INSTALL_PREFIX&



使用cmake生成器"Ninja Multi-Config";处理CCD_ 1的正确方法是什么。例如,如果你这样做:

$ cmake -DCMAKE_INSTALL_PREFIX=../install -G "Ninja Multi-Config" ..
$ cmake --build . --config Release --target install

然后做

$ cmake --build . --config Debug --target install

../install中的文件会被Debug安装覆盖吗?在这种情况下,处理安装位置的正常方法是什么?

默认情况下,它们将被覆盖-也就是说,使用多重配置时,配置文件将安装到相同的位置。

命令行";手动";方法

如果您不介意每次安装时都必须在命令行上手动执行这种操作,那么只需对cmake --install <...>使用--prefix参数即可。

来自CMAKE_INSTALL_PREFIX:的文档

CMAKE_INSTALL_PREFIX可以在配置构建树以设置其安装前缀时定义。或者,当使用cmake(1(命令行工具的--install模式时,可以使用--prefix选项指定不同的前缀。

从这个意义上说,CMAKE_INSTALL_PREFIX0可以被视为每个生成的构建系统设置的默认值,可以在命令行上重写。

所以你可以做一些类似cmake --install <build_dir> --config <config> --prefix <install_dir_unique_to_config>的事情。

CMakeLists.txt方法中的默认值

有关各种解决方法,请参阅此CMake邮件线程。总结如下:

您可以使用<CONFIG>_POSTFIXtarget属性将后缀附加到目标的输出名称(有一些例外,请参阅文档(。

set_target_properties(my_target <more targets can be listed here> PROPERTIES
DEBUG_POSTFIX "-debug"
RELEASE_POSTFIX "-release"
# etc.
)

使用install(DESTINATION)参数的解决方案:

install(TARGETS ${LIB_NAME}
CONFIGURATIONS DEBUG
EXPORT ${LIB_NAME}Config-d
PUBLIC_HEADER DESTINATION "include/${LIB_NAME}"
LIBRARY DESTINATION "bin/${LIB_NAME}/debug/"
ARCHIVE DESTINATION "lib/${LIB_NAME}/debug"
)
install(TARGETS ${LIB_NAME}
CONFIGURATIONS RELEASE
EXPORT ${LIB_NAME}Config
PUBLIC_HEADER DESTINATION "include/${LIB_NAME}"
LIBRARY DESTINATION "bin/${LIB_NAME}/release/"
ARCHIVE DESTINATION "lib/${LIB_NAME}/release/"
)

最新更新