簡體   English   中英

使用 FetchContent cmake 命令發布構建 opencv

[英]Issue building opencv using FetchContent cmake command

我真的需要你的幫助,因為我真的不明白我做錯了什么。

使用非常簡單的附加 CMakeLists.txt,我收到以下錯誤(很多次):

CMake Error in build/_deps/opencv-src/modules/core/CMakeLists.txt:
  Target "opencv_core" INTERFACE_INCLUDE_DIRECTORIES property contains path:

    "/home/myuser/tmp/build"

  which is prefixed in the build directory.

你能幫我修一下嗎?

感謝您的幫助。

我正在使用的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.8 FATAL_ERROR)

project(TEST_PROJECT)

set(CMAKE_CXX_STANDARD 14)

if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
        cmake_policy(SET CMP0135 NEW)
endif ()

include(FetchContent)

FetchContent_Declare(
        opencv
        GIT_REPOSITORY https://github.com/opencv/opencv.git
        GIT_TAG 4.6.0
        GIT_SHALLOW TRUE
        GIT_PROGRESS TRUE
)
FetchContent_MakeAvailable(opencv)
set(OpenCV_DIR ${CMAKE_CURRENT_BINARY_DIR})
find_package(OpenCV REQUIRED)

在 Windows 系統上嘗試過同樣的方法——也沒有成功。

最后,我在構建和源代碼樹之外安裝了 OpenCV。 然后只使用 CMakeList.txt 中的 find_package。

我在使用 FetchContent 時也遇到了將變量傳遞給 OpenCV 構建的問題。 例如使用 TBB 或 CUDA。

正如@sweenish 猜測的那樣,問題出在OpenCV_DIR變量定義上。 所以我刪除了這一行並在FetchContent_Declare調用中添加了OVERRIDE_FIND_PACKAGE 現在它在 Linux 和 Windows 兩個系統上都能正常工作。

我的 CMakeLists.txt 現在看起來像:

cmake_minimum_required(VERSION 3.8 FATAL_ERROR)

project(TEST_PROJECT)

set(CMAKE_CXX_STANDARD 14)

if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
        cmake_policy(SET CMP0135 NEW)
endif ()

include(FetchContent)

FetchContent_Declare(
        opencv
        GIT_REPOSITORY https://github.com/opencv/opencv.git
        GIT_TAG 4.6.0
        GIT_SHALLOW TRUE
        GIT_PROGRESS TRUE
        OVERRIDE_FIND_PACKAGE
)
FetchContent_MakeAvailable(opencv)
find_package(OpenCV REQUIRED)

暫無
暫無

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

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