将cmake组件安装到不同的目录中
假设我有一些可执行文件的组件安装规则:将cmake组件安装到不同的目录中,cmake,Cmake,假设我有一些可执行文件的组件安装规则: 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-utilsinstall规则,但我希望它
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
install规则,但我希望它们能转到其他地方,而不是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"
)
这非常有效,除了建筑特殊包装
产生:
$ tree install
install
├── bin
│ ├── foo1
│ ├── foo2
│ └── foo3
└── package
└── bin
└── special
我如何让它产生:
$ tree install
install
└── package
└── bin
├── foo1
├── foo2
├── foo3
└── special
我将有多个不同的
special
s,它们取决于foo-utils
,我希望每个package-special
将foo-utils
安装到不同的目录中。foo-utils
与specials
也在一个单独的项目中,因此我无法安装(目标…
foo-utils) cmake\u安装。如果尚未安装前缀,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"
)
添加自定义目标(特殊包)
取决于特殊情况
命令“${CMAKE_COMMAND}”
-DCMAKE\u INSTALL\u组件=特殊
-P“${CMAKE_BINARY_DIR}/CMAKE_install.CMAKE”
命令“${CMAKE_COMMAND}”
-DCMAKE\u INSTALL\u COMPONENT=foo utils
-DCMAKE_INSTALL_PREFIX=“${CMAKE_INSTALL_PREFIX}/package/bin”#您是否可以为您的独立FOO-UTILS
软件包设置一个特殊变量,例如FOO-UTILS\u-BIN\u-DEST
,该变量默认为BIN
,但可以在您的软件包特殊
自定义目标中将其设置为不同的值?@SteveLorimer这些UTILS位于不同的项目中(添加到问题中),我有多个依赖它们的软件包,所以我不确定这是否有效?嗯,恐怕我不确定。我看到cmake\u install。cmake
引用变量cmake\u install\u PREFIX
。在调用foo-utils的安装组件时,您是否尝试过处理这个问题?类似于-DCMAKE\u install\u PREFIX=”${CMAKE_INSTALL_PREFIX}/package/bin“
或者类似的东西?@SteveLorimer是的!太棒了。你能写一个答案让我接受吗?