【发布时间】:2014-08-30 03:57:09
【问题描述】:
对于一个项目,我需要创建一个包含我使用的所有库(opencv、cgal)的可执行文件,以便在没有这些库的计算机上执行它。目前,这是我的 CMakeLists.txt(我使用 linux)。
cmake_minimum_required(VERSION 2.8)
#set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -O2")
project( labeling )
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
add_library(OpenCV STATIC IMPORTED)
add_library(CGAL STATIC IMPORTED COMPONENTS Core)
add_library(GMP STATIC IMPORTED)
find_package(OpenCV REQUIRED)
find_package(CGAL QUIET COMPONENTS Core )
find_library(GMP_LIBRARY gmp /usr/lib)
include(src)
include( ${CGAL_USE_FILE} )
include( CGAL_CreateSingleSourceCGALProgram )
set(EXECUTABLE_OUTPUT_PATH ../bin)
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
include_directories( src )
include_directories( ${OpenCV_INCLUDE_DIRS} )
file(GLOB_RECURSE nei_SRC "src/*.cpp")
add_executable( nei_segmentation ${nei_SRC})
target_link_libraries( nei_segmentation ${OpenCV_LIBS} ${GMP_LIBRARY})
以这种方式,只有 GMP 和其他一些 c++ 库包含在我的可执行文件中。我的问题是:如何创建一个生成文件以便以静态方式自动包含所有库并仅创建一个包含所有库的“大”可执行文件?你能帮帮我吗?
【问题讨论】:
-
您不应该使用
file(GLOB ...)来收集源文件,当您添加新文件时它将无法正常工作。你的问题是什么也很不清楚。add_library(IMPORTED)调用也没有做任何事情。 -
我需要创建一个包含所有库(opencv、cgal 和所有常见 c++ 库)的可执行文件,以便在未安装 Opencv 或 CGAL 或其他 C++ 库的其他计算机上执行可执行文件.
-
首先您需要确保您所依赖的所有库都是静态构建的。通常情况并非如此。之后,您需要确保您的
find_package调用找到那些静态库。 -
是的,我知道,我的问题是:如何包含 .a 文件。
-
安德烈亚,你的问题到底是什么?在您的帖子中,唯一的问题是“您能帮帮我吗?”。您应该编辑您的帖子,并至少描述您迄今为止测试的内容有哪些问题。
标签: c++ opencv compilation cmake cgal