Создаваемые хэшированные и ABI-версии общих объектов с помощью CMake

#cmake #shared-libraries #versioning

#cmake #общие библиотеки #управление версиями

Вопрос:

В обоих numpy и h5py двоичные общие объекты помечаются как хэшем , так и версией ABI. Например, если вы pip install h5py , вы можете видеть:

 ls lib/python3.9/site-packages/h5py.libs libaec-9c9e97eb.so.0.0.10 libhdf5-346dbfc8.so.200.1.0 libhdf5_hl-84bfe2a0.so.200.0.1 libsz-090daab4.so.2.0.1  

Я хотел бы создать общий объект, помеченный с использованием этой схемы в CMake. Я попробовал следующее:

 set_target_properties(foo PROPERTIES VERSION ${HASH} SOVERSION ${ABI_VERSION})  

Однако, если ${HASH} и ${ABI_VERSION} не совпадают, это просто создает серию символических ссылок, где foo.so -gt; foo.so.ABI_VERSION -gt; foo.so.HASH , что отличается от более сложной стратегии, используемой h5py.

Можно ли этого достичь в CMake?

Комментарии:

1. Я не проверял это сам, но использование suffix целевых свойств и и ( LIBRARY_ ) OUTPUT_NAME может дать желаемые результаты. Кстати: добавление расширения файла к имени вашей цели-это имхо не очень хорошая идея set_target_properties(foo PROPERTIES OUTPUT_NAME "libfoo-${HASH}" SUFFIX ".so.${ABI_VERSION}")