使用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_PREFIX
0可以被视为每个生成的构建系统设置的默认值,可以在命令行上重写。
所以你可以做一些类似cmake --install <build_dir> --config <config> --prefix <install_dir_unique_to_config>
的事情。
CMakeLists.txt方法中的默认值
有关各种解决方法,请参阅此CMake邮件线程。总结如下:
您可以使用<CONFIG>_POSTFIX
target属性将后缀附加到目标的输出名称(有一些例外,请参阅文档(。
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/"
)