LINUX.ORG.RU

Сборка под-проекта с примерами даже на Марсе

 ,


0

1

Суть такова: есть некая библиотека mylib, структура каталога сырцов которой предельно проста: src/*.(cpp|h) + CMakeLists.txt

Хочется добавить каталог example c example.cpp + CMakeLists.txt внутри, так чтобы:

make install для mylib ставил его в /usr/share/mylib/example/*.(cpp|txt) - это понятно как делать

пользователь мог собрать примеры указав -DWITH_EXAMPLE=YES _не_устанавливая_либу_, т.е. линковка с только что собранным mylib, инклудятся локальные хедеры

в случае установки пользователь мог бы копирнуть /usr/share/mylib/example куда нибудь, зайти внутрь и собрать пример тем самым линкуя его с _установленной_ либой

как бескостыльно сделать пункты 2 и 3 ?

★★★★★

cmake с зависимостями. Спроси резета, он хоть и вендотролль, но в cmake хорошо разбирается.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от x0r

Пока можешь в моей сосфоржерепе полазить: все более-менее жирное у меня на cmake, в т.ч. так и не добитая до конца CGI-library (хотел туда вебсокеты запилить, да пока хотел, уже запилили — надо тупо под готовье обертку воткнуть).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

CMakeLists.txt библиотеки у меня готов, add_subdirectory я сделать могу. основная загвоздка в том, как в дочернем подпроекте сделать «понималку» с кем линковать и откуда инклудить: из каталога уровнем выше или из /usr

x0r ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

впринципе да, можно банально подчитать переменные родителя из подпроекта.

x0r ★★★★★
() автор топика

пользователь мог собрать примеры указав -DWITH_EXAMPLE=YES _не_устанавливая_либу_, т.е. линковка с только что собранным mylib, инклудятся локальные хедеры

Оберни секцию install в if'ы

в случае установки пользователь мог бы копирнуть /usr/share/mylib/example куда нибудь, зайти внутрь и собрать пример тем самым линкуя его с _установленной_ либой

Положи туда FindMylib.cmake. В каждом примере будет

find_package(MyLib REQUIRED)

В FinMylib.cmake стандартный заголовок типа

if (Mylib_FOUND)
    return ()
endif ()
Поэтому при сборке из проекта эти find_package у тебя ничего делать не будут.

Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.