CMAKE:安装在不同位置的自定义目标

CMAKE: a custom target to install at different location

我正在将我们的产品从使用 Makefiles 移植到 CMAKE。 使用 Makefile,我们有 'install' 目标将内容移动到用户机器上的某个位置和 'deploy' - 到服务器上的某个固定位置。我不想 运行 'cmake -DCMAKE_INSTALL_PREFIX=...' 每次需要切换目的地时都重新配置,我更喜欢尽量减少命令行上的额外输入。因此,在我的 CMakeLists 中,我有

 set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/../../_install)

现在,我正在尝试使用 'add_custom_target' 但不确定如何正确执行此操作:

add_custom_target(DEPLOY
    COMMAND "${CMAKE_COMMAND}" --build . --target install --install ${SITE}
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)

有什么想法吗?

这是一个完整的例子:

cmake_minimum_required(VERSION 3.21)
project(test)

set(SITE "${CMAKE_SOURCE_DIR}/_deploy"
    CACHE PATH "Alternate install prefix for 'deploy'")

add_executable(main main.cpp)

include(GNUInstallDirs)
install(TARGETS main)

add_custom_target(
  deploy
  COMMAND "${CMAKE_COMMAND}"
          --install "${CMAKE_BINARY_DIR}"
          --config  "$<CONFIG>"
          --prefix  "${SITE}"
)

减少到

cmake --build /path/to/build --config ... --target deploy

请注意,如果您的安装规则存储 ${CMAKE_INSTALL_PREFIX} 的值,则 none 将起作用。你必须小心只使用相对路径。如果您确实犯了这个错误,您将别无选择,只能修复您的代码或重新配置。