На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
  
> cmake и внешняя либа
    Всем привет!

    Прошу помощи в конфигурации cmake. Сення первый день вожусь с cmake и сабж не получается! :'(
    Делаю тестовый проект, структура его такова:

    ExpandedWrap disabled
      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) написал:

    ExpandedWrap disabled
      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):

    ExpandedWrap disabled
      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 (статически и динамически)? :wall:

    И попутно ... в конфиге я определяю битность, в которую собирается проект.
    А можно ли как-то подобным образом определить static/shared и vc/mingw?
      Не совсем понятно, в чём вопрос. target_include_directories + target_link_libraries тут почему-то не подходят?
      Но вообще обычно сторонние библиотеки подключают через find_package - он найдёт cmake скрипт, проставит нужные переменные и сделает прочие действия, специфические для подключаемой библиотеки.

      Добавлено
      Кстати
      Цитата JoeUser @
      В CMakeLists.txt (1) написал:
      ExpandedWrap disabled
        include_directories(sftp++)
        target_link_libraries(TestSFTP sftp++)


      Гораздо удобнее это делать, объявляя target_include_directories(sftp++ INTERFACE include_path) в cmakelists библиотеки. Тогда при подключении sftp++ в первом файле тебе достаточно будет указать target_link_libraries, а include подтянутся уже автоматом.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0313 ]   [ 16 queries used ]   [ Generated: 19.04.24, 14:13 GMT ]