Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > C/C++: Прочее > cmake и внешняя либа |
Автор: JoeUser 18.07.20, 18:23 |
Всем привет! Прошу помощи в конфигурации cmake. Сення первый день вожусь с cmake и сабж не получается! Делаю тестовый проект, структура его такова: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> C:\Projects\c++\TestSFTP\ ├─ main.cpp ├─ CMakeLists.txt (1) └─ sftp++\ ├─ sftp_auth.cpp ├─ sftp_tools.cpp ├─ sftp++.cpp ├─ sftp_auth.h ├─ sftp_defs.h ├─ sftp++.h └─ CMakeLists.txt (2) В CMakeLists.txt (1) написал: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> cmake_minimum_required(VERSION 3.5) project(TestSFTP LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(SOURCE_EXE main.cpp) include_directories(sftp++) add_executable(TestSFTP ${SOURCE_EXE}) add_subdirectory(sftp++) target_link_libraries(TestSFTP sftp++) A в CMakeLists.txt (2): <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> cmake_minimum_required(VERSION 3.5) project(sftp++) set(SOURCE_LIB sftp++.cpp sftp_auth.cpp sftp_tools.cpp ) set(HEADER_LIB sftp++.h sftp_defs.h sftp_auth.h ) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(BITS x64) elseif() set(BITS x32) endif() message("Bits ${BITS}") add_library (sftp++ STATIC ${SOURCE_LIB} ${HEADER_LIB}) Пока все линкуется и собирается. Но мне нужно подключить внешнюю либу libssh2 к моей собираемой sftp++, а она у меня находится тут для shared: C:/Projects/c++/libssh2/vs-x64-shared/bin C:/Projects/c++/libssh2/vs-x64-shared/include C:/Projects/c++/libssh2/vs-x64-shared/lib Или тут для static: C:/Projects/c++/libssh2/vs-x64-static/include C:/Projects/c++/libssh2/vs-x64-static/lib Собственно, вопрос Куда и что прописать, чтобы создаваемая мною либа sftp++ могла использовать libssh2 (статически и динамически)? И попутно ... в конфиге я определяю битность, в которую собирается проект. А можно ли как-то подобным образом определить static/shared и vc/mingw? |
Автор: OpenGL 23.07.20, 09:38 |
Не совсем понятно, в чём вопрос. target_include_directories + target_link_libraries тут почему-то не подходят? Но вообще обычно сторонние библиотеки подключают через find_package - он найдёт cmake скрипт, проставит нужные переменные и сделает прочие действия, специфические для подключаемой библиотеки. Добавлено Кстати Цитата JoeUser @ В CMakeLists.txt (1) написал: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> include_directories(sftp++) target_link_libraries(TestSFTP sftp++) Гораздо удобнее это делать, объявляя target_include_directories(sftp++ INTERFACE include_path) в cmakelists библиотеки. Тогда при подключении sftp++ в первом файле тебе достаточно будет указать target_link_libraries, а include подтянутся уже автоматом. |