如何使用CMake创建独立的Windows C++可执行文件?

pod7payv  于 2023-11-19  发布在  Windows
关注(0)|答案(1)|浏览(213)

我有一个程序

#include <fstream>
#include <vector>
#include <opencv2/opencv.hpp>

字符串
CMakeLists如下

cmake_minimum_required(VERSION 3.5)

project(CirclesDetectionProject VERSION 0.1)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)

# OpenCV
find_package(OpenCV REQUIRED PATHS "C:/opencv/build/x64/mingw64/")
include_directories(${OpenCV_INCLUDE_DIRS})

set(PROJECT_SOURCES
    main.cpp
)

add_executable(CirclesDetection ${PROJECT_SOURCES})
target_link_libraries(CirclesDetection ${OpenCV_LIBS})


我在Windows 10上使用VScode,代码使用mingw32-make正确编译和运行。
我的问题是,我如何生成一个可执行文件,可以运行在其他windows机器上,不一定有依赖安装?

ukqbszuj

ukqbszuj1#

我使用了CFE explorer,它告诉你exe需要的所有ddl,这非常有用。在我的例子中,它告诉我我有这些依赖项:

libwinpthread-1.dll
libopencv_core480.dll
libopencv_imgcodecs480.dll
liboopencv_imgproc480.dll
kernel32.dll
msvcrt.dll

字符串
对于libwinpthread-1.dll,我必须将此添加到CMakeLists以确保静态链接:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -static-libgcc -static-libstdc++")


然后对于OpenCV,我确实在静态模式下从源代码重新编译了它,并使用OpenCV的静态版本重新编译了我的代码。确保它使用的是静态版本:

set(OpenCV_DIR "C:/opencv-4.7.0-static/build/x64/mingw64/")
find_package(OpenCV REQUIRED)


最后,对于kernel32.dllmsvcrt.dll,它们是标准的Windows系统库,它们存在于每台Windows机器上,所以你不必担心它们。

相关问题