Global CMakeLists.txt
Этот CMakeLists.txt компилирует несколько файлов C ++ (Qt5 / ...) с MO C и не является "специальным" ни в каком отношении.
Код, о котором идет речь, такой:
add_subdirectory(third-party/libwebrtc)
include_directories(third-party/libwebrtc)
target_link_libraries(${PROJECT_NAME} libwebrtc)
libwebrt c CMakeLists.txt
cmake_minimum_required(VERSION 3.3)
project(libwebrtc)
# Allow the use of IN_LIST operand
cmake_policy(SET CMP0057 NEW)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
${CMAKE_SOURCE_DIR}/CMakeModules)
find_package(Git REQUIRED)
include(FindLibraries)
include(Version)
include(Options)
include(TargetOsAndCpu)
...
Полный libwebrt c source -> https://github.com/cloudwebrtc/libwebrtc-build/blob/dev/CMakeLists.txt
Ошибка на 'cmake ..'
Если я запускаю mkdir build; cd build; cmake ..
, я вижу, что CMake ищет include()
в проекте верхнего уровня, а не в его подкаталоге, как я ожидал ,
joachim@thinkpad-x1:[~/projects/client/build]: cmake ..
-- CMAKE_SYSTEM_INFO_FILE:
-- CMAKE_SYSTEM_NAME:
-- CMAKE_SYSTEM_PROCESSOR:
-- CMAKE_SYSTEM:
-- CMAKE_C_COMPILER: /usr/bin/clang
-- CMAKE_CXX_COMPILER: /usr/bin/clang++
CMake Error at sources/third-party/libwebrtc/CMakeLists.txt:13 (include):
include could not find load file:
FindLibraries
CMake Error at sources/third-party/libwebrtc/CMakeLists.txt:14 (include):
include could not find load file:
Version
Вопрос (оригинал)
Могу ли я что-то сделать с этим, кроме интеграции библиотеки в мой базовый проект путем копирования включений из каталога CMakeModules?
Спасибо, на этот вопрос ответили ниже, все еще оставив это здесь.
Вопрос о зависимостях
Вызов add_subdirectory правильно создает libwebrt c, но мой вызов include_directories, тот, что сверху Уровень CMakeLists.txt (не библиотека libwebrt c), хочет включить файлы, которые доступны только после полной сборки:
include_directories(
${CMAKE_CURRENT_BINARY_DIR}/sources/third-party/libwebrtc/include/webrtc
${CMAKE_CURRENT_BINARY_DIR}/sources/third-party/libwebrtc/include/webrtc/third_party/libyuv/include/
${CMAKE_CURRENT_BINARY_DIR}/sources/third-party/libwebrtc/webrtc/src/third_party/abseil-cpp
)
Как сделать, чтобы cmake зависел от полной сборки библиотеки, а затем строить основную программу вперед? Обычно используется add_custom_command (..) , но поскольку мы используем add_subdirectory (..) , мы также не можем использовать add_custom_command (..) .
Я взломал эту проблему, переименовав библиотеку в проект (libwebrtcx) внутри libwebrtc / CMakeLists.txt, а также в ExternalProject_Add (libwebrtcx ...) и добавив add_dependencies ($ {PROJECT_NAME} libwebrtcx) а можно ли это сделать без этого взлома?