1. 程式人生 > >windows下cmake編譯opencv3.4.1+opencv_contrib報錯

windows下cmake編譯opencv3.4.1+opencv_contrib報錯

問題一:

 CMake Warning (dev) at cmake/common.cmake:5 (source_group):
    Syntax error in cmake code at

      C:/yumen/wxgisgdal-read-only/cmake/common.cmake:5

    when parsing string

      Header Files\\ogr\ogrsf_frmts

    Invalid escape sequence \o

出現的錯誤程式碼段:

#add data
 macro(add_files_macro FPATH FGROUP)
     file(GLOB GDAL_AHHEADERS ${FPATH}/*.h  ${FPATH}/*.hpp)
     set(GDAL_HHEADERS ${GDAL_HHEADERS} ${GDAL_AHHEADERS})
     source_group("Header Files\\${FGROUP}" FILES ${GDAL_AHHEADERS})
     file(GLOB GDAL_ACSOURCES ${FPATH}/*.cpp ${FPATH}/*.cc ${FPATH}/*.c)
     set(GDAL_CSOURCES ${GDAL_CSOURCES} ${GDAL_ACSOURCES})
     source_group("Source Files\\${FGROUP}" FILES ${GDAL_ACSOURCES})
 endmacro()

原因:發生錯誤是因為變數${}的內容包含帶有視窗樣式分隔符路徑,cmake將這些字元視為轉移字元

解決:將巨集改為一個函式,以避免這種情況。

改為:

#add data 
function(add_files_macro FPATH FGROUP) 
         file(GLOB GDAL_AHHEADERS ${FPATH}/*.h ${FPATH}/*.hpp) 
         set(GDAL_HHEADERS ${GDAL_HHEADERS} ${GDAL_AHHEADERS}) 
         source_group("Header Files\\${FGROUP}" FILES ${GDAL_AHHEADERS}) 
         file(GLOB GDAL_ACSOURCES ${FPATH}/*.cpp ${FPATH}/*.cc ${FPATH}/*.c) 
         set(GDAL_CSOURCES ${GDAL_CSOURCES} ${GDAL_ACSOURCES}) 
         source_group("Source Files\\${FGROUP}" FILES ${GDAL_ACSOURCES}) 
endfunction() 

就是把macro------endmarco 改為了function-----endfunction

問題二:

CMake Error at E:/opencv/opencv3.4.1/opencv/sources/cmake/OpenCVDownload.camke:255(nessage):
  tinny-dnn: Unpack failed:1
Call Stack (most recent call first):
E:/p-opencv-contrib/opencv_contrib-3.4.1/opencv_contrib-3.4.1/moudules/dnn_modern/CMakeLists.txt:18(ocv_download)

所在行txt:18,就是下面第一行

ocv_download(FILENAME "v1.0.0a3.tar.gz"
               HASH "adb1c512e09ca2c7a6faef36f9c53e59"
               URL
                 "${OPENCV_TINY_DNN_URL}"
                 "$ENV{OPENCV_TINY_DNN_URL}"
                 "https://github.com/tiny-dnn/tiny-dnn/archive/"
               DESTINATION_DIR "${TINY_DNN_CPP_PATH}"
               STATUS TINY_DNN_DOWNLOAD_SUCCESS
               ID "tiny-dnn"
               UNPACK RELATIVE_URL)

解決:

需要把

E:/p-opencv-contrib/opencv_contrib-3.4.1/opencv_contrib/3.4.1/moudules/dnn_modern/CMakeLists.txt

中的FILENAM改為PACKAGE

同理,其他類似的地方,都這樣替換就行。