Получить исходные файлы из библиотеки интерфейса - PullRequest
0 голосов
/ 14 октября 2019

У меня есть библиотека только для заголовков, для которой я хочу написать файл 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 голосов
/ 14 октября 2019

Поскольку ваша цель объявлена ​​как INTERFACE, команда target_sources() заполняет свойство цели INTERFACE_SOURCES цели, а не SOURCES. Из документов:

Ключевые слова INTERFACE, PUBLIC и PRIVATE необходимы для указания области действия следующих аргументов. Элементы PRIVATE и PUBLIC будут заполнять свойство SOURCES <target>. Элементы PUBLIC и INTERFACE будут заполнять свойство INTERFACE_SOURCES <target>.

Попробуйте вместо этого получить свойство INTERFACE_SOURCES:

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 INTERFACE_SOURCES)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...