Связывание библиотеки с библиотекой и приложением в CMakeC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Связывание библиотеки с библиотекой и приложением в CMake

Сообщение Anonymous »

Мне нужно связать LibA с LibB, а затем LibB с приложением (APP), кроме того, APP должен иметь доступ к интерфейсу API из LibA, а LibB должен иметь доступ к некоторым внутренним файлам из include/ LibA.
Например, LibA имеет api/interface.h и include/internal.h. LibB необходимо скомпилировать внутренний.h, и я также хочу, чтобы интерфейс.h находился в интерфейсе LibB, чтобы приложение могло также использовать интерфейс.h, только добавив LibB.
Правда, сейчас я создаю LibA как статическую библиотеку, взаимодействующую со всем в каталоге api/ и дополнительно устанавливающим файлы из include/.

Код: Выделить всё

add_library(LibA STATIC ${SOURCE_FILES})

set_target_properties(LibA
PROPERTIES
PUBLIC_HEADER "${PUBLIC_HEADER_FILES}"
)

target_include_directories(LibA
PUBLIC
$
$
PRIVATE
$
$
)

if(NOT BUILD_TESTS)
install(TARGETS ${LOCAL_PROJECT_NAME}
EXPORT ${LOCAL_PROJECT_NAME}Targets
LIBRARY DESTINATION lib/$
ARCHIVE DESTINATION lib/$
RUNTIME DESTINATION bin/$
PUBLIC_HEADER DESTINATION api
)

install(DIRECTORY "include/" DESTINATION include)
Затем в LibB я нахожу LibA и передаю файлы из API LibA. Здесь я действительно не знаю, как получить доступ к файлам include/ из LibA.

Код: Выделить всё

set(LibA-DIR path)
find_package(LibA REQUIRED)
get_target_property(LibA_PATH LibA IMPORTED_LOCATION_${CMAKE_BUILD_TYPE_UPPER})
get_target_property(LibA_INCLUDE_DIRS LibA INTERFACE_INCLUDE_DIRECTORIES)

add_library(LibB SHARED ${SOURCE_FILES})
#add_library(LibB STATIC ${SOURCE_FILES})

target_include_directories(LibB
PUBLIC
$
$
PRIVATE
$
$
)

target_link_libraries(LibB
PRIVATE
LibA
)

if(NOT BUILD_TESTS)
install(TARGETS LibB
EXPORT LibBTargets
LIBRARY DESTINATION lib/$
ARCHIVE DESTINATION lib/$
RUNTIME DESTINATION bin/$
PUBLIC_HEADER DESTINATION api
)

install(DIRECTORY ${LibA_INCLUDE_DIRS}/ DESTINATION api)
И, наконец, в приложении я просто добавляю LiB

Код: Выделить всё

set(LibB_DIR path)
find_package(LibB REQUIRED)

target_link_libraries(APP PRIVATE
LibB
)
Я действительно не знаю, как мне добиться того, чего я хочу. Возможно, это плохая идея, и я не знаю лучшего решения.
Я хочу добиться того, чтобы LibB имела доступ к включаемым файлам LibA и передавала файлы API LibA.
Если LibA собирается статически вместе с LibB, нужно ли приложению только LibB.lib?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... n-in-cmake
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»