簡體   English   中英

如何通過 CMakeLists.txt 在 C++ 項目中使用 Caffe 庫

[英]How to use Caffe library in C++ project with CMakeLists.txt

我試圖在我用 CMakeLists.txt 編譯的 C++ 項目中使用 Caffe,但它不想工作。 我在代碼中唯一的一行是

#include <caffe/caffe.hpp>

我自己編譯了 Caffe,它安裝在目錄“/home/tamas/caffe”中。 到目前為止,我的 CMakeLists.txt 看起來像這樣:

cmake_minimum_required (VERSION 3.5)
include(FindPkgConfig)

project (main)

set (CMAKE_CXX_STANDARD 11)
set (CMAKE_CXX_STANDARD_REQUIRED TRUE)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -std=c++11 -pthread")
set (source_dir "${PROJECT_SOURCE_DIR}/src/")
set (OpenCV_DIR "/home/tamas/opencv/include/opencv2")
set (Caffe_DIR "/home/tamas/caffe")

file (GLOB source_files "${source_dir}/ssd_video.cpp")

find_package(OpenCV 4.4.0 REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
find_package(Caffe REQUIRED)
include_directories(${Caffe_INCLUDE_DIRS})

add_executable (main ${source_files})

target_link_libraries(main ${OpenCV_LIBS})
target_link_libraries(main ${Caffe_LIBRARIES})

錯誤如下:

CMake Error at CMakeLists.txt:24 (find_package):
  By not providing "FindCaffe.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Caffe", but
  CMake did not find one.

  Could not find a package configuration file provided by "Caffe" with any of
  the following names:

    CaffeConfig.cmake
    caffe-config.cmake

  Add the installation prefix of "Caffe" to CMAKE_PREFIX_PATH or set
  "Caffe_DIR" to a directory containing one of the above files.  If "Caffe"
  provides a separate development package or SDK, be sure it has been
  installed.
-- Configuring incomplete, errors occurred!

問題是我已經搜索過了,但我的電腦上沒有 FindCaffe.cmake 文件。 我找到了 CaffeConfig.cmake 的示例,但我試過了,它也不起作用。

有沒有辦法可以將 Caffe 與我的 C++ 項目聯系起來? 謝謝!

<library>_DIR通常不應在 CMake 代碼中手動設置。 應該使用更好的替代方案,因為設置這些變量不一定會滿足您的要求。 它不會改變find_package在哪里找到它的庫。

CaffeConfig.cmake文件是在構建Caffe時生成的。 您永遠不應該下載另一個文件,這些文件僅與特定的構建配置兼容。

Caffe 庫支持與 CMake 一起使用,因此不需要FindCaffe.cmake

要使find_package工作,請設置<package>_ROOT變量(至少需要 CMake 3.12)或者您必須 append 安裝路徑在CMAKE_PREFIX_PATH中。 這是一個使用前綴路徑的 CMake 示例:

# If you only built the library
list (APPEND CMAKE_PREFIX_PATH "/home/tamas/caffe/build-dir")

# If you installed the library there
list (APPEND CMAKE_PREFIX_PATH "/home/tamas/caffe/")

find_package(Caffe REQUIRED)

請注意,不會設置Caffe_LIBRARIESCaffe_INCLUDE_DIRS 這是舊的 CMake 樣式,Caffe 庫使用新樣式。 這是你應該做的:

target_link_libraries(main PUBLIC caffe caffeproto)

此行添加包含目錄並添加到庫的鏈接。

要解決此問題,您可以執行以下操作:

  1. 下載此FindCAFFE.cmake文件
  2. 在您的 repo 根目錄中創建cmake目錄並將下載的文件放在那里。
  3. 修改您的 CMake 文件:
    • 添加set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake")
    • set (Caffe_DIR "/home/tamas/caffe")更改為set (CAFFE_ROOT_DIR "/home/tamas/caffe")
    • find_package(Caffe REQUIRED)更改為find_package(CAFFE REQUIRED)
    • 分別使用CAFFE_INCLUDE_DIRSCAFFE_LIBRARIES包含目錄和鏈接庫
  4. 清理您的構建目錄並再次運行cmake命令

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM