【问题标题】:How to build an executable with Cmake where all the dependence are contained in the project DIR?如何使用 Cmake 构建一个可执行文件,其中所有依赖项都包含在项目 DIR 中?
【发布时间】:2017-09-07 13:30:54
【问题描述】:

我在一个使用 OpenCV 和 Dlib 的项目中,我希望该项目是跨平台和独立的。所以我可以直接将项目 Dir 复制到另一个平台,并能够通过 ruing cmake 来获取 exe。

目录:

project/   
          opencv-3.2.0
         |
          dlib-19.2
         |
          include
         |
          source

其中“opencv-3.2.0”和“dlib-19.2”分别包含从官方网站下载的库的源代码。 “include”和“source”分别包含我的 .h 和 .cpp。


这是我到目前为止想出的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.1)

project(visionBean)


set (OPENCV_VERSION_DIR_NAME ${PROJECT_SOURCE_DIR}/opencv-3.2.0)
set (DLIB_VERSION_DIR_NAME ${PROJECT_SOURCE_DIR}/dlib-19.2)


#setup opencv

add_subdirectory(${OPENCV_VERSION_DIR_NAME})
include_directories( ${OpenCV_INCLUDE_DIRS} )

#setup dlib
add_subdirectory(${DLIB_VERSION_DIR_NAME})
include_directories( ${DLIB_INCLUDE_DIRS} )

 #files for main project
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/source)

file(GLOB ${PROJECT_NAME}_INC "${PROJECT_SOURCE_DIR}/include/*.h")
file(GLOB_RECURSE ${PROJECT_NAME}_SRC "${PROJECT_SOURCE_DIR}/source/*.cpp")

add_executable(${PROJECT_NAME} source/demo.cpp)
target_link_libraries(${PROJECT_NAME}_LINKER ${OpenCV_LIBS} ${DLIB_LIBS})

如果以前有人这样做过,你能告诉我如何做到这一点,或者请指出我正确的方向吗?谢谢你


编辑 我遇到的拳头错误是:

CMake 错误:CMake 无法确定目标的链接器语言:opencv_xxx

【问题讨论】:

  • 你能给出具体的问题或错误信息吗?否则,这对于Code Review 站点来说更重要。一般来说,你为什么不使用find_package()
  • 感谢您的建议。我会将它添加到编辑中。

标签: c++ opencv cmake dlib


【解决方案1】:

我认为这行不通。您正在添加一个完整的项目作为子目录。

opencv 本身就是一个 CMake 项目,因为它的顶层 CMakeList.txt 有一个project 命令,它不仅仅是一个子目录。

您可以修改opencv CMakeLists.txt,使其成为一个子目录,但我不建议这样做,只需编写一个脚本(* .sh for linux and *.bat for windows)为每个项目调用cmake .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多