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

问题描述 投票:0回答:1

我有一个程序依赖于

#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 计算机上运行的可执行文件?

c++ visual-studio-code cmake exe
1个回答
0
投票

我使用了

CFE explorer
,它告诉你exe需要的所有ddls,这非常有用。就我而言,它表明我有这些依赖项:

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.dll
msvcrt.dll
,它们是标准的Windows系统库,它们存在于每台Windows机器上,所以你不必担心它们。

© www.soinside.com 2019 - 2024. All rights reserved.