【问题标题】:cmake glob include while preserving directory structurecmake glob包含同时保留目录结构
【发布时间】:2011-09-07 04:13:53
【问题描述】:

我是cmake 的新手,我正在尝试安装.hpp 文件,同时保留目录结构。

目前为止

FILE(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp"
  "${CMAKE_CURRENT_SOURCE_DIR}/include/MyLib/*.hpp"
  "${CMAKE_CURRENT_SOURCE_DIR}/include/MyLib/detail/*.hpp"

install (FILES ${files}  DESTINATION include)

所有文件都已找到,但目录层次结构已展平。

FWIW 我试图模拟的bjam 命令是

install headers 
    : ../include/EnsembleLearning.hpp  
      [ glob ../include/MyLib/*.hpp ]  
      [ glob ../include/MyLib/detail/*.hpp ]  
    : <install-source-root>../include ;

【问题讨论】:

    标签: c++ installation cmake directory-structure glob


    【解决方案1】:

    您可以使用 CMake install 命令的 DIRECTORY 变体。此命令将保留复制目录的结构:

    install(DIRECTORY include/ DESTINATION include
              FILES_MATCHING PATTERN "*.hpp")
    

    如果要复制的目录包含不应安装的子目录,则必须使用 PATTERN EXCLUDE 选项明确排除那些:

    install(DIRECTORY include/ DESTINATION include
              FILES_MATCHING PATTERN "*.hpp"
              PATTERN "include/MyOtherLib" EXCLUDE)
    

    【讨论】:

    • 这对我来说不适用于当前的 cmake-2.8.5。要么没有安装文件,要么如果我省略了 FILES_MATCHING 行,一切都会被安装。有什么想法吗?
    • 这是我正在使用的行:INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/ FILES_MATCHING PATTERN "*.h" PATTERN ".svn" EXCLUDE) 我也可以省略PATTERN ".svn" EXCLUDE) 行,它仍然没有任何变化。
    • 我觉得不错。尝试选项REGEX "^.*\\.h$" 而不是PATTERN "*.h"
    • 好吧,这很奇怪。它适用于 Linux(Ubuntu),但不适用于 OS X。所以这似乎是一个平台问题。感谢您的帮助。
    • 我现在发现这个问题是 OS X 特有的,并且已经在他们的错误跟踪器中报告:public.kitware.com/Bug/view.php?id=10366
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多