从接口库获取源文件

时间:2019-10-14 17:35:05

标签: cmake

我有一个仅标头的库,我想为其编写CMake文件,以便在其他项目中使用。为此,我需要将库声明为接口目标。然后,头文件由CMakeList.txt文件添加到子文件夹中。

现在,我想获取源文件列表以在其上运行clang格式。但是get_target_property在接口目标上不起作用。有什么方法可以从接口目标中提取源(或头)?

这是我目前拥有的代码(无法正常工作)

make_minimum_required(VERSION 3.12)

project(foo
  LANGUAGES CXX
  VERSION 1.0.0)

add_library(bar INTERFACE)

# add header files in sub folders with
target_sources(bar INTERFACE
    "${CMAKE_CURRENT_SOURCE_DIR}/header.h"
    )

# this gives the error
get_target_property(MY_SOURCES bar SOURCES)

错误消息

INTERFACE_LIBRARY targets may only have whitelisted properties.  The
property "SOURCES" is not allowed.

我试图将接口目标链接到真实目标并以这种方式获取源,但是我只将源直接添加到第二个目标,而不是接口目标的源

1 个答案:

答案 0 :(得分:0)

由于将目标声明为INTERFACE,因此target_sources()命令将填充目标的INTERFACE_SOURCES属性,而不是SOURCES的属性。从文档中:

  

必须使用INTERFACEPUBLICPRIVATE关键字来指定以下参数的范围。 PRIVATEPUBLIC项将填充SOURCES的{​​{1}}属性。 <target>PUBLIC项将填充INTERFACE的{​​{1}}属性。

尝试获取INTERFACE_SOURCES属性:

<target>