将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是的!太棒了。你能写一个答案让我接受吗?