per un progetto Devo creare un eseguibile che includa tutte le librerie che ho usato (opencv, cgal) per eseguirlo su un computer che non ha quelle librerie. Attualmente, questo è il mio CMakeLists.txt (io uso linux).Compilare un eseguibile statico con CMake
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})
In tal modo solo GMP e alcune altre librerie C++ sono incluse nel mio eseguibile. La mia domanda è: come posso creare un makefile per includere automaticamente tutte le librerie in modo statico e creare solo un "grande" eseguibile che contenga tutte le librerie? Mi potete aiutare?
Non si deve usare file '(GLOB ...)' per raccogliere file di origine che non funziona correttamente quando si aggiungono nuovi file. Inoltre, non è chiaro quale sia il tuo problema. Anche le chiamate 'add_library (IMPORTED)' non stanno facendo nulla. – pmr
Ho bisogno di creare un eseguibile che includa tutte le librerie (opencv, cgal e tutte le librerie C++ comuni) per eseguire l'eseguibile su un altro computer dove Opencv o CGAL o altre librerie C++ non sono installate. – Andrea
Per prima cosa è necessario assicurarsi che tutte le librerie da cui si dipende siano costruite staticamente. Questo spesso non è il caso. Dopodiché è necessario assicurarsi che le chiamate 'find_package' trovino quelle librerie statiche. – pmr