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 将起作用。你必须小心只使用相对路径。如果您确实犯了这个错误,您将别无选择,只能修复您的代码或重新配置。
我正在将我们的产品从使用 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 将起作用。你必须小心只使用相对路径。如果您确实犯了这个错误,您将别无选择,只能修复您的代码或重新配置。