Создайте libre2.a [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Создайте libre2.a [дубликат]

Сообщение Anonymous »

Мне нужна библиотека Google re2 для кросс-платформенного проекта (win, mac, linux, android), а Linux — единственная операционная система с приемлемой ее упаковкой (arch Linux не использует cmake, но это решаемо), Brew и vcpkg терпят неудачу по-своему, и я даже не знаю, где искать Android.
Вместо того, чтобы разбираться с беспорядком в упаковке, я хочу собрать библиотеки для моего CI (и конечных пользователей) и, возможно, для других людей.
re2, к сожалению, зависит от подмножества спуска, что делает его более болезненным, и я не совсем уверен, как заставить системы сборки обоих проектов чисто плевать в меня .o, которые я затем могу вставить в .a или заставить CMake сделать это за меня
Вот мой лучший вариант CMakeLists.txt

Код: Выделить всё

cmake_minimum_required(VERSION 3.22)
project(RE2_STATIC CXX)

include(FetchContent)

FetchContent_Declare(
abseil
GIT_REPOSITORY https://github.com/abseil/abseil-cpp.git
GIT_TAG 20250814.1
)
FetchContent_MakeAvailable(abseil)
FetchContent_Declare(
re2
GIT_REPOSITORY https://github.com/google/re2.git
GIT_TAG 2025-08-12
)
FetchContent_MakeAvailable(re2)

file(WRITE ${CMAKE_BINARY_DIR}/dummy.cpp "// dummy source")
add_library(re2_static STATIC ${CMAKE_BINARY_DIR}/dummy.cpp)

target_link_libraries(re2_static PRIVATE
re2::re2
absl::base
absl::strings
absl::synchronization
absl::optional
absl::flat_hash_map
absl::flat_hash_set
absl::inlined_vector
absl::flags
absl::core_headers
absl::str_format
absl::span
absl::hash
absl::fixed_array
)
который не работает с

Код: Выделить всё

CMake Error in build/_deps/re2-src/CMakeLists.txt:
install(EXPORT "re2Targets" ...) includes target "re2" which requires
target "absl_{every module}" that is not in any export set.
Поправки:
Не дубликат stackoverflow.com/a/76750428/3440745, поскольку ABSL_ENABLE_INSTALL не имеет никакого эффекта, и этот вопрос включает только CMake как попытку решения моей проблемы (решение, отличное от CMake, работает так же хорошо)

Код: Выделить всё

target_link_libraries
может быть PUBLIC, но это не решает проблему
Удаление содержимого выборки и битов в target_link_libraries для re2 или abseil приведет к созданию .a, re2 будет использовать системный спуск, если не указано

Подробнее здесь: https://stackoverflow.com/questions/797 ... a-libre2-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»