我应该添加 headers 作为 INTERFACE 目标源,还是只设置一个 INTERFACE 目标包含目录?

Should I add headers as INTERFACE target sources, or just set an INTERFACE target include directory?

在使用 CMake 的存储库中,我有一个从 foo.c 编译而来的库 foo。还有一个文件 foo.h,为了便于讨论,仅在针对 foo 编译代码时才需要该文件。已编译的库和 foo.h 都已安装。

现在,我应该如何向依赖目标“宣布”foo.h?我应该写:

target_sources(foo INTERFACE "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>/foo.h")

,或者:

target_include_directories(foo INTERFACE "$<BUILD_INTERFACE:${GENERATED_INCLUDE_DIR}>")

或者 - 也许两者都有?

只有后者。 foo.h 不是链接对象的第一方来源,这是 (INTERFACE_)SOURCES 应该建模的。然后目标 foo 为了被使用需要被链接者可以找到它的头;那些属于 INTERFACE_INCLUDE_DIRECTORIEStarget_include_directories 组)。