исполняемый файл может использовать libutil самостоятельно, но обычно он называет метод из libmain , который использует libutil в своей реализации.
Так что после прочтения некоторых учебных пособий и документов о Cmake Этот пример казался довольно простым.
Существует простой cmakelists.txt для каждого проекта, в то время как libutil ссылается на libmain и исполняемые ссылки с libmain . (I OMMITED TARGET_INCLUDE_DIRECTIORES < /code>, чтобы лишить некоторые строки). Тот же префикс_Пат используется всеми проектами. < /P>
libutil < /h1>
Код: Выделить всё
include(GNUInstallDirs)
project(libUtil)
set(CMAKE_SHARED_LIBRARY_PREFIX "")
add_library(libUtil SHARED main.cpp)
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Config
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(EXPORT ${PROJECT_NAME}Config DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake)
< /code>
libmain < /h1>
include(GNUInstallDirs)
project(libMain)
set(CMAKE_SHARED_LIBRARY_PREFIX "")
add_library(libUtil SHARED main.cpp)
find_package(libUtil REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC libUtil)
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Config
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(EXPORT ${PROJECT_NAME}Config DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake)
< /code>
исполняемая < /h1>
project(exe)
find_package(libMain REQUIRED)
set(CMAKE_SHARED_LIBRARY_PREFIX "")
add_executable(exe main.cpp)
target_link_libraries(${PROJECT_NAME} PRIVATE libMain)
< /code>
Однако при создании исполняемого файла я в итоге получил ошибку линкера, сообщил Exe не в состоянии выполнить -llibitil < /strong>. < /p>
Я не трачу довольно много времени на это и после прочтения нескольких постов (или, по крайней мере, я так нужен), что мне нужно, чтобы дать custom -ancile. Переименован сгенерированный на libmaintargets.cmake) < /p>
include("${CMAKE_CURRENT_LIST_DIR}/libMainTargets.cmake")
find_package(libUtil REQUIRED)
< /code>
Ошибка линкера исчезла сейчас, и я могу запустить свой проект. Тем не менее, я не понимаю, зачем мне это делать. Я понял, что есть разница при обработке уже построенной библиотеки. Однако, поскольку Cmake всегда использует разделение проектов на основе каталогов, как и зачем мне создавать несколько проектов в одном и том же cmakelists.txt? До сих пор я всегда использовал find_package Пожалуйста, будьте подробно в объяснении и /или укажите некоторые ссылки, которые я пропустил, и указывайте на некоторые лучшие практики, предполагая, что все проекты либо создаются, либо являются системными библиотеками, такими как Boost или JNI. < /p>
Спасибо!>
Подробнее здесь: https://stackoverflow.com/questions/596 ... nd-package
Мобильная версия