gpt4 book ai didi

cmake - 使用 Ninja Multi-Config cmake 生成器时处理 `CMAKE_INSTALL_PREFIX` 的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-05 06:10:41 30 4
gpt4 key购买 nike

使用 cmake 生成器“Ninja Multi-Config”处理 CMAKE_INSTALL_PREFIX 的正确方法是什么。例如,如果您这样做:

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

然后再做

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

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

最佳答案

默认情况下,它们将被覆盖——即。使用多配置,配置的文件安装到相同的位置。

命令行“手动”方法

如果您不介意每次安装时都必须在命令行上手动执行此类操作,您可以使用 --prefix cmake --install <...> 的参数.

来自 CMAKE_INSTALL_PREFIX 的文档:

The CMAKE_INSTALL_PREFIX may be defined when configuring a build tree to set its installation prefix. Or, when using the cmake(1) command-line tool's --install mode, one may specify a different prefix using the --prefix option.

从这个意义上说,CMAKE_INSTALL_PREFIX可以看作是为每个生成的构建系统设置的默认值,可以在命令行上覆盖。

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

CMakeLists.txt 方法中的默认值

参见 this CMake mailing thread for various workarounds .总结如下:

您可以(有一些异常(exception) - 请参阅文档)使用 <CONFIG>_POSTFIX target property将后缀附加到目标的输出名称。

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/"
)

关于cmake - 使用 Ninja Multi-Config cmake 生成器时处理 `CMAKE_INSTALL_PREFIX` 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64351425/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com