Библиотека libwebrtc
из https://github.com/cloudwebrtc/libwebrtc-build/blob/dev/CMakeLists.txt была создана для использования с make; make install
, и проект, который хочет использовать библиотеку, должен позже использовать find_package
из CMake.
Однако я хочу изменить libwebrtc
, чтобы его можно было добавить как подмодуль git в мой текущий проект в качестве пользовательской библиотеки, как, например, https://github.com/itay-grudev/SingleApplication, который компилируется, когда Я печатаю: cmake ..; превратить в статическую / Dynami c библиотеку, а затем связать в моем основном приложении. (Пример библиотеки Qt, на который я ссылаюсь ранее, сбивал с толку, так как это сборка вне моего основного проекта и связанная только с последующим - что я не хочу) Извините за эту путаницу.
Чтобы иметь возможность сделать это, я думаю, что ExternalProject_Add
в https://github.com/cloudwebrtc/libwebrtc-build/blob/a24a5e5947658d43339d4bfd85d3f4c52fc71057/CMakeLists.txt#L100 необходимо изменить на add_library
вызов.
Проблема здесь в том, что include_directories
используется основным проектом до того, как библиотека будет полностью построена.
Вопрос
Как переписать libwebrtc
для использования в качестве простого c библиотека с правильными зависимостями сборки, так что мой основной проект компилируется / связывается только после того, как сборка libwebrtc
была завершена, а файлы пользовательских заголовков были сгенерированы в CMAKE_CURRENT_BINARY_DIR
из libwebrtc
.
Или в другими словами, как переписать libwebrtc
для использования без необходимости вызывать make install
для библиотеки, а затем использовать find_package
для использования этой библиотеки.
Хак (который уже работает)
С этим хаком я уже могу:
- Построить библиотеку из моего родительского проекта
- Зависит от созданных заголовочных файлов, которые существуют только после того, как
libwebrtc
было построен полностью (таким образом, отложить основной проект здания до зависимости встречаются) - Зависит от сгенерированной библиотеки webrt c .a stati c для компоновщика, шаг
Я представляю, что make install
будет работать с libwebrtc
является статически связанным.
add_dependencies(${PROJECT_NAME} libwebrtcx)
add_subdirectory(third-party/libwebrtcx)
include_directories(
${CMAKE_BINARY_DIR}/sources/third-party/libwebrtcx/include/webrtc
${CMAKE_BINARY_DIR}/sources/third-party/libwebrtcx/include/webrtc/third_party/libyuv/include/
${CMAKE_BINARY_DIR}/sources/third-party/libwebrtcx/webrtc/src/third_party/abseil-cpp
)
add_library(libwebrtc STATIC IMPORTED)
set_property(TARGET libwebrtc PROPERTY IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/sources/third-party/libwebrtcx/webrtc/src/out/Release/obj/libwebrtc.a")
target_link_libraries(${PROJECT_NAME} libwebrtc)
Примечание. Требуется переименовать проект libwebrt c в libwebrtcx , а также ExternalProject_Add
в https://github.com/cloudwebrtc/libwebrtc-build/blob/a24a5e5947658d43339d4bfd85d3f4c52fc71057/CMakeLists.txt#L100 должен быть переименован в libwebrtcx .
Примечание. Также требуется переименовать все CMAKE_BINARY_DIR
в CMAKE_CURRENT_BINARY_DIR
и CMAKE_SOURCE_DIR
в CMAKE_CURRENT_SOURCE_DIR
. Подробности можно найти здесь: CMake: использование add_subproject с библиотекой с помощью команды «Включить» приводит к неверному относительному пути