假设我有一些可执行文件的组件安装规则:
install(TARGETS foo1 DESTINATION bin COMPONENT foo-utils)
install(TARGETS foo2 DESTINATION bin COMPONENT foo-utils)
install(TARGETS foo3 DESTINATION bin COMPONENT foo-utils)
现在,我有自己的可执行文件,我希望其安装规则也安装所有foo-utils
安装规则 - 但我希望它们不是bin
,而是让它们去其他地方。
add_executable(special ...)
# more options
add_dependencies(special foo1 foo2 foo3)
install(TARGETS special DESTINATION package/bin COMPONENT special)
add_custom_target(package-special
DEPENDS special
COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=special -P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=foo-utils -P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
)
这很有用,除了构建package-special
产生:
$ tree install
install
├── bin
│ ├── foo1
│ ├── foo2
│ └── foo3
└── package
└── bin
└── special
如何制作:
$ tree install
install
└── package
└── bin
├── foo1
├── foo2
├── foo3
└── special
我将有多个不同的special
取决于foo-utils
,我希望每个package-special
将foo-utils
安装到另一个目录中。 foo-utils
也在specials
的单独项目中,因此我无法install(TARGETS ...)
foo-utils
。
答案 0 :(得分:2)
cmake_install.cmake
使用默认安装前缀(如果尚不存在)。
# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX "/usr/local")
endif()
因此,您可以在调用foo-utils
安装命令的脚本之前指定一个值。
add_custom_target(package-special
DEPENDS special
COMMAND "${CMAKE_COMMAND}"
-DCMAKE_INSTALL_COMPONENT=special
-P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
COMMAND "${CMAKE_COMMAND}"
-DCMAKE_INSTALL_COMPONENT=foo-utils
-DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}/package/bin" # <-- here
-P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
)