CMake - linking to library downloaded from ExternalProject_add()

前端 未结 6 1605
刺人心
刺人心 2020-11-29 19:34

I am trying to use ExternalProject_add() to download/install dependencies. It installs fine, but I can\'t figure out how to actually link the libraries after they are downlo

6条回答
  •  Happy的楠姐
    2020-11-29 20:33

    Because you're downloading the external project, you already know where everything is because you just downloaded it, so it doesn't need 'finding'.

    I got it working with add_library. This is my actual code that works:

    ExternalProject_Add(ForexConnectDownload
        PREFIX 3rd_party
        #--Download step--------------
        URL http://fxcodebase.com/bin/forexconnect/1.3.1/ForexConnectAPI-1.3.1-Linux-x86_64.tar.gz
        URL_HASH SHA1=7fdb90a2d45085feb8b76167cae419ad4c211d6b
        #--Configure step-------------
        CONFIGURE_COMMAND ""
        #--Build step-----------------
        BUILD_COMMAND ""
        #--Install step---------------
        UPDATE_COMMAND "" # Skip annoying updates for every build
        INSTALL_COMMAND ""
    )
    
    SET(FXCM_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/3rd_party/src/ForexConnectDownload/include)
    SET(FXCM_LIB_DIR ${CMAKE_CURRENT_BINARY_DIR}/3rd_party/src/ForexConnectDownload/lib)
    
    add_library(ForexConnect SHARED IMPORTED)
    set_target_properties(ForexConnect PROPERTIES IMPORTED_LOCATION ${FXCM_LIB_DIR}/libForexConnect.so)
    

    From there, each program that depends on it needs a add_dependencies and of course target_link_libraries. Eg:

    include_directories(${FXCM_INCLUDE_DIR})
    add_executable(syncDatabase syncDatabase.cpp trader/database.cpp trader/fxcm.cpp)
    target_link_libraries(syncDatabase ForexConnect)
    add_dependencies(syncDatabase ForexConnectDownload)
    
    • include_directories - tells it to search for directories there
    • target_link_libraries - just add your library, as you named it (not a variable)

    The add_dependencies makes it wait before trying to include the dirs needed.

    That does the trick for me. Works with make -j4. Get's all the dependencies right.

提交回复
热议问题