【问题标题】:how to compile an app that can be run on Windows system using cmake如何使用 cmake 编译可以在 Windows 系统上运行的应用程序
【发布时间】:2021-10-02 15:39:30
【问题描述】:

我使用 cmake 来帮助在 Windows 8.1 x64 系统上使用 MinGW32 编译应用程序。

目标是使应用程序可以在从 Windows XP 到 Windows 10 的 Windows 中运行。

使用静态和动态结合编译,由于有些dll找不到静态库。

一些主要代码

SET(toolchain_lib   "E:/mingw32/lib" "E:/mingw32/lib/gcc/mingw32/5.3.0") 
LINK_DIRECTORIES(${toolchain_lib})
target_link_libraries(${TARGET_NAME}  
      libgdi32.a  
      libglu32.a    
      #freeglut.dll 
      freeglut.a  
      libglew32.a 
      #libglew32.dll.a
      opengl32.lib 
      libstdc++.a 
      libgcc.a 
) 
set(CMAKE_EXE_LINKER_FLAGS  "-static-libgcc -static-libstdc++ /SUBSYSTEM:WINDOWS,5.1")
FILE (GLOB SRC_LIST "${src}/*.cpp" "${inc}/*.h")
ADD_EXECUTABLE(${TARGET_NAME} ${SRC_LIST})

cmake 响应:

[100%] Linking CXX executable ..\bin\sample_cube_picturebox_t.exe
g++.exe: error: /SUBSYSTEM:WINDOWS,5.1: No such file or directory
CMakeFiles\sample_cube_picturebox_t.dir\build.make:200: recipe for target '../bin/sample_cube_picturebox_t.exe' failed
make.exe[2]: *** [../bin/sample_cube_picturebox_t.exe] Error 1
CMakeFiles\Makefile2:81: recipe for target 'CMakeFiles/sample_cube_picturebox_t.dir/all' failed
make.exe[1]: *** [CMakeFiles/sample_cube_picturebox_t.dir/all] Error 2
Makefile:89: recipe for target 'all' failed
bin\make.exe: *** [all] Error 2

【问题讨论】:

  • 您确定/subsystem 是有效的mingw 选项吗?因为语法看起来很像 msvc。
  • 不要使用没有CONFIGURE_DEPENDS的glob,或者更好的是,根本不要使用glob。见here
  • Windows XP 已经停产了很长一段时间。继续支持它只会支持人们不迁移的决定,鉴于大量漏洞永远不会被修补,这是不合理的。

标签: c++ cmake mingw


【解决方案1】:

/SUBSYSTEM:WINDOWS,5.1 不是 GCC 标志。

您可能想使用 -D_WIN32_WINNT=0x0501 行来指定 Windows XP 兼容性(请参阅:https://docs.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt?view=msvc-160

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2012-01-31
    • 2020-04-10
    • 1970-01-01
    • 2012-09-18
    • 2013-04-11
    相关资源
    最近更新 更多