gpt4 book ai didi

CMake - 链接到从ExternalProject_add()下载的库

转载 作者:行者123 更新时间:2023-12-03 06:18:26 27 4
gpt4 key购买 nike

我正在尝试使用ExternalProject_add()来下载/安装依赖项。它安装得很好,但我不知道下载库后如何实际链接它们。

我想对刚刚下载的库调用target_link_libraries(),但库的路径会因系统而异。

如果这是系统依赖项,我只需调用 find_package() - 但这些包未安装在默认搜索路径上。我认为您不能在模块模式下指定 find_package 的搜索路径。

这是我的 CMakeLists.txt 的一个片段,它不起作用:

ExternalProject_Add(
protobuf
URL http://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gz
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
PREFIX ${MYPROJ_SOURCE_DIR}/dependencies
)
find_package(protobuf REQUIRED)
set(LIBS ${LIBS} ${PROTOBUF_LIBRARIES})
target_link_libraries (mybinary ${LIBS})

最佳答案

因为您正在下载外部项目,所以您已经知道所有内容在哪里,因为您刚刚下载了它,因此不需要“查找”。

我让它与 add_library 一起工作。这是我实际有效的代码:

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)

从那里开始,每个依赖它的程序都需要一个add_dependency,当然还有target_link_libraries。例如:

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 - 告诉它在那里搜索目录
  • target_link_libraries - 只需添加您的库,如您所命名(不是变量)

add_dependency 让它在尝试包含所需的目录之前等待。

这对我来说很有用。与 make -j4 一起使用。正确获取所有依赖项。

关于CMake - 链接到从ExternalProject_add()下载的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6351609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com