Вместо того, чтобы разбираться с беспорядком в упаковке, я хочу собрать библиотеки для моего 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Удаление содержимого выборки и битов в target_link_libraries для re2 или abseil приведет к созданию .a, re2 будет использовать системный спуск, если не указано
Подробнее здесь: https://stackoverflow.com/questions/797 ... a-libre2-a
Мобильная версия