Я хочу связать каркас, который я сам сделал под названием 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>
)
последнее редактирование : Пожалуйста, прочитайте мой собственный ответ