Как экспортировать / импортировать каркас MacOS с помощью cmake 3.14 - PullRequest
1 голос
/ 28 марта 2019

Я хочу связать каркас, который я сам сделал под названием VideoCapturer, с другим проектом через его VideoCapturerConfig.cmake.Но я не могу правильно получить «требование использования» / «target_link_libraries».

Когда я указываю полный путь, жестко закодированный, к месту установки фреймворка, он работает!

target_link_libraries( myprojectA
  PUBLIC -framework /install/path/to/videocapturer.framework )

Я бы предпочел сделать это с target , предоставленным find_package () для большей надежности.

Вот фрагмент CMake, который я написал для сборки и установки фреймворка

# MyVideoCapturer framework
project( MyVideoCapturer )

### General variables
set( myvideocapturer_targets_export_name "${CMAKE_PROJECT_NAME}Targets" )
set( myvideocapturer_config_install_dir  "${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}" )
set( myvideocapturer_project_config      "${CMAKE_PROJECT_NAME}Config.cmake" )
set( myvideocapturer_version_config      "${CMAKE_PROJECT_NAME}ConfigVersion.cmake" )

add_library( VideoCapturer "" )
add_library( MyVideoCapturer::VideoCapturer ALIAS VideoCapturer )

add_subdirectory( src ) # Mostly target_sources( VideoCapturer PRIVATE someSrcFiles.cpp )
list( APPEND _pubheaders "macVideoCapturer/VideoCapturer.h" )
set_target_properties( VideoCapturer PROPERTIES
    FRAMEWORK TRUE
    PUBLIC_HEADER "${_pubheaders}"
    XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
    )

### Install targets, headers and export
include( GNUInstallDirs )
install(
  TARGETS VideoCapturer
  EXPORT "${myvideocapturer_targets_export_name}"
  FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}
  PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  )

install(
  EXPORT "${myvideocapturer_targets_export_name}"
  DESTINATION "${myvideocapturer_config_install_dir}"
  NAMESPACE MyVideoCapturer::
  FILE ${myvideocapturer_targets_export_name}.cmake
  )

### Config file for Packaging
include( CMakePackageConfigHelpers )
configure_package_config_file(
  "Config.cmake.in"
  "${myvideocapturer_project_config}"
  INSTALL_DESTINATION ${myvideocapturer_config_install_dir}
  PATH_VARS
    myvideocapturer_config_install_dir
  NO_SET_AND_CHECK_MACRO
  NO_CHECK_REQUIRED_COMPONENTS_MACRO
  )

в моем Config.cmake.in

@PACKAGE_INIT@
include( "${CMAKE_CURRENT_LIST_DIR}/@myvideocapturer_targets_export_name@.cmake" )

После установки этого фреймворка: в MyVideoCapturerTargets.cmake :

# Create imported target CppMacVideoCapturer::VideoCapturer
add_library(CppMacVideoCapturer::VideoCapturer SHARED IMPORTED)
set_property(TARGET CppMacVideoCapturer::VideoCapturer PROPERTY FRAMEWORK 1)

Насколько я понимаю, 2 строки должно быть достаточно, чтобы понять это правильно:

find_package( myvideocapturer REQUIRED )
target_link_libraries( myprojectA
  PUBLIC -framework videocapturer )

, когда я пытаюсь это сделать, проект не может найти заголовки, расположенные в Videocapturer.framework / Headers, и если я пытаюсь:

target_link_libraries( myprojectA
  PUBLIC -framework MyVideoCapturer::myvideocapturer )

CMake не находит цель.

Есть идеи, как мне экспортировать мои фреймворки?

Большое спасибо

РЕДАКТИРОВАТЬ

Благодаря Цыварев Я нашел способ ее решить.Я не уверен, что это «правильный» способ сделать это.

В базовом проекте:

if( APPLE )
  target_include_directories( VideoCapturer
    PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_LIBDIR}/VideoCapturer.framework>
    )
else() # Framework is Apple-only
  target_include_directories( VideoCapturer
    PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
    )
endif()

РЕДАКТИРОВАТЬ 1/4/19 :правильный путь, кажется, делает:

  target_include_directories( VideoCapturer
    PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_LIBDIR}/VideoCapturer.framework>
    )

последнее редактирование : Пожалуйста, прочитайте мой собственный ответ

1 Ответ

0 голосов
/ 08 мая 2019

Правильный способ установки / экспорта или упаковки фреймворка выглядит примерно так: https://github.com/forexample/ios-dynamic-framework

Однако, он содержит обходной путь , но нет find_package

В этом хранилище есть много хороших примеров для "современного" CMake. проверить это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...