2017-08-02 1810 views
0

我正在尝试创建脚本以编译和运行,如emscirpten所述。将OpenCV与cmake链接。将“OpenCV”的安装前缀添加到CMAKE_PREFIX_PATH中不起作用

这是我希望为其创建cmake文件的命令。

./emcc -std=c++11 -O3 -I.. ~/DLIB/dlib-19.4/dlib/all/source.cpp -I/home/akshay/DLIB/dlib-19.4 -I/usr/include/X11/ -lpthread -lX11 -lopencv_imgcodecs -o webca.js ~/DLIB/dlib-19.4/examples/webcam_face_pose_ex.cpp -ldlib `pkg-config opencv --cflags --libs` 

到目前为止,我已经想出了这个。这是我的CMAKELists.txt文件。

cmake_minimum_required(VERSION 3.5.1) 
project(DLIB) 
SET(CMAKE_BUILD_TYPE_INIT "Release") 
set(CMAKE_CXX_STANDARD 11) 
if (${CMAKE_SYSTEM_NAME} MATCHES "Emscripten") 
    set(CMAKE_C_COMPILER "emcc") 
    endif() 

if(NOT DEFINED OpenCV_PREFIX) 
    set(OpenCV_PREFIX ${CMAKE_INSTALL_PREFIX}) 
    endif() 

set(CMAKE_VERBOSE_MAKEFILE on) 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build.emscripten) 

set(DLIB_SRC "/home/akshay/DLIB/dlib-19.4/examples/webcam_face_pose_ex.cpp") 
add_library(DLIB_static ${DLIB_SRC}) 
set(OpenCV_PREFIX /usr/share/OpenCV/OpenCVConfig.cmake) 

include_directories(/usr/include/X11 /home/akshay/DLIB/dlib-19.4 /home/akshay/DLIB/dlib-19.4/dlib/all/source.cpp) 

set_target_properties(DLIB_static PROPERTIES LINK_FLAGS "-s DEMANGLE_SUPPORT=1 --preload-file assets --bind") 
find_package(PkgConfig REQUIRED) 

find_package(OpenCV REQUIRED 
    PATHS ${OpenCV_PREFIX}/lib/cmake/ 
    ${OpenCV_PREFIX}/share/OpenCV/ 
     NO_DEFAULT_PATH) 
find_library(OpenCV REQUIRED  PATHS ${OpenCV_PREFIX}/lib/cmake/ 
    ${OpenCV_PREFIX}/share/OpenCV/ 
     NO_DEFAULT_PATH) 

set(CMAKE_REQUIRED_FLAGS "-std=c++11 -O3 -lpthread -lX11 -lopencv_imgcodecs -ldlib `pkg-config opencv --cflags --libs`") 

#file(GLOB_RECURSE CORE_HDR src/.h) 
#file(GLOB_RECURSE CORE_SRC src/.cpp) 

add_definitions("-s DEMANGLE_SUPPORT=1 --preload-file ${CMAKE_SOURCE_DIR}/assets --bind") 
add_executable(DLIB /home/akshay/DLIB/dlib-19.4/examples/webcam_face_pose_ex.cpp) 

当我运行此命令:cmake -DCMAKE_PREFIX_PATH=/usr/share/OpenCV/OpenCVConfig.cmake -DCMAKE_BUILD_TYPE=Debug -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=/home/akshay/Downloads/emsdk-portable/emscripten/1.37.16/cmake/Modules/Platform/Emscripten.cmake . && make

它给了我,像这样的错误:

CMake Error at CMakeLists.txt:25 (find_package): 
    Could not find a package configuration file provided by "OpenCV" with any 
    of the following names: 

    OpenCVConfig.cmake 
    opencv-config.cmake 

    Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set 
    "OpenCV_DIR" to a directory containing one of the above files. If "OpenCV" 
    provides a separate development package or SDK, be sure it has been 
    installed. 

它似乎无法找到CMAKE_PREFIX_PATH或者说我没有将它设置正确。

从昨天起,我刚刚开始摆弄CMAKE。我可能对我所做的事情一无所知。已经尝试了其他一些SO的答案。

任何帮助将不胜感激

+0

的一个问题,我与你的CMake注意到文件之上。您正在将OpenCV_PREFIX设置为实际的配置文件,但在您的find_package中将其用作PATH。如果你删除了OpenCVConfig.cmake部分,CMake应该找到这个包。你也不需要find_library调用。 Find_package将通过OpenCV配置来处理库。解决这个问题,并可能遵循elvis的建议,你不需要CMAKE_PREFIX_PATH。 – StAlphonzo

+0

@StAlphonzo噢,我以为自己的答案已被接受。我认为有一些互联网问题。 –

+1

不用担心,我只是增加了对真正答案的支持,因为您的CMakeLists文件中存在问题。我认为这也值得一提,以帮助你(和其他人)。另外,修复CMake文件可能会消除在命令行上设置任何选项的需要。 – StAlphonzo

回答

0

您只需将OpenCV_DIR设置为安装OpenCV的路径,例如:

cmake -DOpenCV_DIR=/usr/local/share/OpenCV ..