LINUX.ORG.RU

Помогите по CMake

 ,


0

1

Пробую сделать кроссплатформенную сборку SHARED библиотеки. Начал с подготовки конфига для VS solution. Нужно чтобы конфиг cmake’a генерил такой солюшн https://gitlab.com/nullbot/tiny-lua-ffi

Песочница, где веду работу находится здесь https://gitlab.com/nullbot/tiny-lua-ffi-cmake

Проблема в том что я не могу прилинковать внешнюю dll зависимость, чтобы она включалась в солюшене. Какое заклинание нужно прописать здесь https://gitlab.com/nullbot/tiny-lua-ffi-cmake/-/blob/master/customlib/CMakeLists.txt#L5 ?

Включить нужно lib/32bit/lua51.dll (которая находится в этом же репозитории). Это для примера, потом добавлю условия в зависимости от разрядности среды и т.п.

Очевидно, что у этой lua51.dll есть и заголовочники, поэтому я бы рекомендовал использовать add_library с флагом IMPORTED. Поиск расположения библиотеки делает find_library. Заметь, что для поиска достаточно задать имя lua и cmake будет в Виндоус искать lua.dll, а в Линукс liblua.so.

Правильней эти заклинания оформить в виде файла FindLua.cmake, разместить его в папке проекта cmake/modules и основном сценарии делать find_package(Lua). Вот вполне рабочий пример https://gitlab.com/u-235/uchmviewer/blob/master/cmake/Findlibzip.cmake

DrBrown
()
Последнее исправление: DrBrown (всего исправлений: 1)

cmake_minimum_required (VERSION 2.8.11)

Настоятельно советую апнуть версию хотя бы до трёшки, а лучше до чего-то посвежее.

По сабжу: use find_package/find_library, Luke!

XMs ★★★★★
()

…конфига для VS solution. Нужно чтобы конфиг cmake’a…

Если не ошибаюсь, то для VS есть плагин, позволяющий конвертировать родной проект в проект CMake, и получившийся файл можно взять за основу.

raspopov
()
Последнее исправление: raspopov (всего исправлений: 1)
Ответ на: комментарий от raspopov

А если точнее то тулчейн, в студию даже 2022 можно поставить тулчейн от 2017. Но там есть проблемы, в 2015 студии поменяли поведение статических переменных

https://learn.microsoft.com/en-us/cpp/build/reference/zc-threadsafeinit-thread-safe-local-static-initialization

CrackedMind
()