我应该添加 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_DIRECTORIES
(target_include_directories
组)。
在使用 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_DIRECTORIES
(target_include_directories
组)。