使用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。
答案 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