【发布时间】:2018-03-24 14:23:57
【问题描述】:
我希望创建两个包,一个包含共享库,另一个包含供开发使用的标头。
一个可行的解决方案是:
INSTALL(TARGETS mylib
COMPONENT core
LIBRARY DESTINATION ${LIBDIR}
)
INSTALL (
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMPONENT devel
DESTINATION ${INCLUDEDIR}
FILES_MATCHING PATTERN "*.h")
不过,CMake 也有一个“PUBLIC_HEADER”目标。 这样您就可以执行以下操作:
INSTALL(TARGETS mylib
LIBRARY DESTINATION ${LIBDIR}
PUBLIC_HEADER DESTINATION ${INCLUDEDIR}
)
我似乎无法让它工作。即使将头文件显式添加到 ADD_LIBRARY(),也不会将任何内容安装到 ${INCLUDEDIR}。有人可以举个例子说明这应该如何工作吗?
另一个问题是我想要不同包中的库和头文件,所以我想要:
INSTALL(TARGETS mylib
COMPONENT core
LIBRARY DESTINATION ${LIBDIR}
)
INSTALL(TARGETS mylib
COMPONENT devel
PUBLIC_HEADER DESTINATION ${INCLUDEDIR}
)
但 PUBLIC_HEADER 似乎需要设置 LIBRARY DESTINATION。 有没有办法做到这一点? 与 install DIRECTORY 相比,PUBLIC_HEADER 有什么优势吗?
【问题讨论】:
-
我一直在尝试使用 PUBLIC_HEADERS 来达到这个目的。它在 Daniel Pfeiffer 关于现代 cmake 的演讲中间接得到了体现,并且在 Windows 上运行时可以工作/安装它们。无法弄清楚我在 linux 上做错了什么......
-
@JonathanOlson 你搞定了吗?
标签: cmake