如何使用 Cmake 构建可执行文件,其中所有依赖项都包含在项目 DIR 中?
How to build an executable with Cmake where all the dependence are contained in the project DIR?
我正在进行一个使用 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})
如果有人以前做过这件事,你能告诉我怎么做或者给我指明正确的方向吗?谢谢
编辑
我 运行 进入的 Fist camke 错误是:
CMake 错误:CMake 无法确定目标的链接器语言:opencv_xxx
我认为这行不通。您正在添加一个完整的项目作为子目录。
opencv 本身就是一个 CMake 项目,因为它的顶层 CMakeList.txt 有一个 project
命令,它不仅仅是一个子目录。
你可以修改opencv CMakeLists.txt,把它做成一个子目录,但我不建议这样做,只需要写一个脚本(*.sh for linux and *.bat for windows) 为每个项目调用 cmake。
我正在进行一个使用 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})
如果有人以前做过这件事,你能告诉我怎么做或者给我指明正确的方向吗?谢谢
编辑 我 运行 进入的 Fist camke 错误是:
CMake 错误:CMake 无法确定目标的链接器语言:opencv_xxx
我认为这行不通。您正在添加一个完整的项目作为子目录。
opencv 本身就是一个 CMake 项目,因为它的顶层 CMakeList.txt 有一个 project
命令,它不仅仅是一个子目录。
你可以修改opencv CMakeLists.txt,把它做成一个子目录,但我不建议这样做,只需要写一个脚本(*.sh for linux and *.bat for windows) 为每个项目调用 cmake。