CMake安装头文件并维护目录层次结构

时间:2018-01-11 17:27:26

标签: cmake

使用cmake 2.8

我想在将头文件从源目录复制到目标目录时维护目录层次结构。例如,需要复制的头文件是 abc / 1.h,def / 2.h并且它们也应该直接在目的地中以相同的顺序复制(通过CMAKE_INSTALL_PREFIX设置)

这是我试过的,但它只是复制头文件而不是包含父目录名的头文件

set(HEADERS "abc/1.h;def/2.h")
install(FILES ${HEADERS} DESTINATION include)

最终输出应为dest_directory / abc / 1.h和dest_directory / def / 2.h。

3 个答案:

答案 0 :(得分:7)

如果目录中有许多文件需要安装,您可以考虑使用install(DIRECTORY)命令流安装目录。您可以选择使用 PATTERN REGEX 选项安装目录中的哪些文件:

install(DIRECTORY "${CMAKE_SOURCE_DIR}/" # source directory
        DESTINATION "include" # target directory
        FILES_MATCHING # install only matched files
        PATTERN "*.h" # select header files
)

有关install(DIRECTORY)的详情,请参阅CMake documentation。此外,它描述了源目录末尾的含义“/”。

答案 1 :(得分:0)

尝试几次后,我自己找到了答案。它需要分多步完成。

install(FILES "abc/1.h" DESTINATION "include/abc")
install(FILES "def/2.h" DESTINATION "include/def")

在复杂的情况下,可以使用REGEX。请参阅Regex in CMake install command

答案 2 :(得分:0)

本着问题的精神,我们希望将所有标头安装在#!/bin/sh if ! whoami &> /dev/null; then if [ -w /etc/passwd ]; then echo "${USER_NAME:-sqlservr}:x:$(id -u):0:${USER_NAME:-sqlservr} user:${HOME}:/sbin/nologin" >> /etc/passwd fi fi /opt/mssql-tools/bin/restore-databases.sh & sqlservr 变量中,该变量不一定包含给定目录中的所有标头(例如,可能有平台相关的标头)。 / p>

我们通过以下宏解决了这个问题,该宏实际上在创建父目录(如果有)的同时安装了给HEADER的所有文件:

FILES