Сделать файл конфигурации частью статической библиотеки через CMAKE - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужно сделать файл конфигурации частью моей статической библиотеки, что означает, что если какой-либо проект ссылается на мою статическую библиотеку, файл конфигурации должен быть скопирован для автоматического создания каталога для этого проекта.Это поведение должно быть одинаковым для всех проектов, ссылающихся на статическую библиотеку.

Это то, чего я пытаюсь достичь:

libabc
   abc.cfg
project1
   build
      abc.cfg  -- Because project1 references static library libabc

Я не хочу менять CMakeLists.txt длякаждый проект.

1 Ответ

0 голосов
/ 27 ноября 2018

Чтобы узнать, является ли библиотека ссылкой, вы можете получить список всех связанных библиотек для цели с get_property() и выполнить поиск свойства LINK_LIBRARIES.

С get_property() вы получите список связанных библиотек.Вы можете искать, если у вас есть string().

Затем, когда вы найдете связанные библиотеки, вы можете использовать file(), чтобы скопировать ваш файл конфигурациив соответствующей папке.

Вы получаете такой код

get_property(MY_LINKED_LIBRARIES TARGET ${MY_TARGET} PROPERTY LINK LIBRARIES)
string(FIND ${MY_LINKED_LIBRARIES} ${MY_LIBRARY_NAME} LIBRARY_FIND)
if (LIBRARY_FIND NOT EQUAL -1)
    file (COPY "abc.cfg" DESTINATION "${MY_LIBRARY_NAME}/abc.cfg")
endif ()

С циклом for для всех ваших библиотек.

...