使用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
中。我更新了示例以排除内部头。