我有一个仅标头的库,我想为其编写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.
我试图将接口目标链接到真实目标并以这种方式获取源,但是我只将源直接添加到第二个目标,而不是接口目标的源
答案 0 :(得分:0)
由于将目标声明为INTERFACE
,因此target_sources()
命令将填充目标的INTERFACE_SOURCES
属性,而不是SOURCES
的属性。从文档中:
必须使用
INTERFACE
,PUBLIC
和PRIVATE
关键字来指定以下参数的范围。PRIVATE
和PUBLIC
项将填充SOURCES
的{{1}}属性。<target>
和PUBLIC
项将填充INTERFACE
的{{1}}属性。
尝试获取INTERFACE_SOURCES
属性:
<target>