CMake安装头文件并维护目录继承权
使用cmake 2.8 我希望在将头文件从源目录复制到目标目录时保持目录继承权。例如,需要复制的头文件是 abc/1.h、def/2.h,并且它们也应以相同的顺序直接复制到目标中(通过CMAKE_INSTALL_前缀设置) 这是我尝试过的,但它只是复制头文件,而不是包含父目录名的头文件CMake安装头文件并维护目录继承权,cmake,Cmake,使用cmake 2.8 我希望在将头文件从源目录复制到目标目录时保持目录继承权。例如,需要复制的头文件是 abc/1.h、def/2.h,并且它们也应以相同的顺序直接复制到目标中(通过CMAKE_INSTALL_前缀设置) 这是我尝试过的,但它只是复制头文件,而不是包含父目录名的头文件 set(HEADERS "abc/1.h;def/2.h") install(FILES ${HEADERS} DESTINATION include) 最后的输出应该是dest_directory/abc/1
set(HEADERS "abc/1.h;def/2.h")
install(FILES ${HEADERS} DESTINATION include)
最后的输出应该是dest_directory/abc/1.h和dest_directory/def/2.h。我自己在尝试了几次之后才找到答案。这需要分多个步骤来完成
install(FILES "abc/1.h" DESTINATION "include/abc")
install(FILES "def/2.h" DESTINATION "include/def")
在复杂的情况下,可以使用正则表达式。请参阅< p>如果在安装目录中有许多文件,可以考虑安装代码:<代码>安装(目录)< /C>命令流。您可以选择目录中应使用模式或正则表达式选项安装的文件:
有关
安装(目录)
的更多信息,请参阅。此外,它还描述了源目录末尾“/”的含义。本着问题的精神,我们希望在HEADER
变量中安装所有头,该变量不一定包括给定目录中的所有头(例如,可能存在平台相关头)
我们使用以下宏解决了这个问题,该宏在创建父目录(如果有)时实际安装了提供给文件的所有文件:
macro(install_with_directory)
set(optionsArgs "")
set(oneValueArgs "DESTINATION")
set(multiValueArgs "FILES")
cmake_parse_arguments(CAS "${optionsArgs}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
foreach(FILE ${CAS_FILES})
get_filename_component(DIR ${FILE} DIRECTORY)
INSTALL(FILES ${FILE} DESTINATION ${CAS_DESTINATION}/${DIR})
endforeach()
endmacro(install_with_directory)
在这里找到了一个完全相同的副本-@infocloubled:On Stack Overflow答案不能重复,只能是问题。参考答案解释了类似于我的答案,但从不同的角度出发,因为问题是不同的。我实际上是指这个问题,但在你的帖子之后,我意识到它是不同的。谢谢你的提示:)这是一个很好的选择!如何使用宏的示例:install\u with_directory(DESTINATION${CMAKE\u install\u PREFIX}/include/${CMAKE\u PROJECT\u NAME}/FILES${HEADERS})
with HEADERS头文件列表及其目录。
macro(install_with_directory)
set(optionsArgs "")
set(oneValueArgs "DESTINATION")
set(multiValueArgs "FILES")
cmake_parse_arguments(CAS "${optionsArgs}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
foreach(FILE ${CAS_FILES})
get_filename_component(DIR ${FILE} DIRECTORY)
INSTALL(FILES ${FILE} DESTINATION ${CAS_DESTINATION}/${DIR})
endforeach()
endmacro(install_with_directory)