Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CMake安装有关子目录的头文件_Cmake - Fatal编程技术网

使用CMake安装有关子目录的头文件

使用CMake安装有关子目录的头文件,cmake,Cmake,我在几个子目录下有一组头文件 |- A | | - a.h | | - b.h | | - a.cpp | | - b.cpp | | B | - c.h | - d.h | - c.cpp | - d.cpp 我有一个变量,其中包含每个文件的路径 set(HEADERS A/a.h A/b.h C/c.h B/d.h) 我用该变量填充目标的PUBLIC_HEADER属性并安装它 set_target_properties(MyTarget PROPERTIES

我在几个子目录下有一组头文件

|- A
| | - a.h
| | - b.h
| | - a.cpp
| | - b.cpp
|
| B
  | - c.h
  | - d.h
  | - c.cpp
  | - d.cpp
我有一个变量,其中包含每个文件的路径

set(HEADERS A/a.h A/b.h C/c.h B/d.h)
我用该变量填充目标的PUBLIC_HEADER属性并安装它

set_target_properties(MyTarget
    PROPERTIES
    PUBLIC_HEADER "${HEADERS}"
    )
install(TARGETS MyTarget
        PUBLIC_HEADER
          DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/MyTarget/

)
问题是is不尊重子目录,这四个文件安装在
MyTarget
下。我想在
MyTarget/A
下为
A.h
b.h
安装它们,在
MyTarget/b
下为
c.h
d.h

安装它们,前提是上面的标题目录(例如
包括
)中
A
b
包含可以安装的标题

install(DIRECTORY include/
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/MyTarget
    FILES_MATCHING PATTERN "*.h"
    PATTERN "*_p.h" EXCLUDE
)
include
目录的尾部斜杠表示其内容(包括其结构)已复制到目标

否则,可以为每个目录手动安装标题,如下所示

set(HEADERS_A A/a.h A/b.h)
set(HEADERS_B B/c.h B/d.h)
install(FILES ${HEADERS_A} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/MyTarget/A)
install(FILES ${HEADERS_B} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/MyTarget/B)

该目录还包含源和不可安装的标头不可安装的标头是否遵循特定的命名方案?然后您可以通过
文件匹配模式“*.h”
模式排除它们。否则您需要逐个安装。是的,它们遵循命名方案。实际上,我也安装了它们,但是在另一个目录
\u p.h
中。我更新了示例以排除内部头。