使用CMake创建的.exe文件太大

irtuqstp  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(104)

我用Visual Studio做了一个C++程序,可执行文件的大小是490 KB
但是,当我通过在Visual Studio中创建CMake Project来创建相同的可执行文件时,可执行文件的大小为1140 KB
为什么这么大?

ars1skjm

ars1skjm1#

我发现CMake正在运行RelWithDebInfo构建。
set(CMAKE_BUILD_TYPE Release)解决了我的问题。可执行文件的大小减少到483 KB

clj7thdc

clj7thdc2#

可执行文件的大小取决于所使用的优化和可执行文件中保留的符号。
通常,构建模式对大小的影响最大。默认情况下,CMake通常会为每种构建类型提供设置,但您可以通过调整CMAKE_BUILD_TYPE变量来自定义它们。
举例来说:

if (CMAKE_BUILD_TYPE STREQUAL "Debug")
    target_compile_options(<executable> PRIVATE -Wall -O0 -g3)
endif()
if (CMAKE_BUILD_TYPE STREQUAL "Release")
    target_compile_options(<executable> PRIVATE -O3 -flto -s -Wl,-s -Wl,--gc-sections)
endif()

字符串
如果你想尽可能地减少可执行文件的大小,我建议使用MinSizeRel模式。像这样:

if (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
    target_compile_options(<executable> PRIVATE -Os -flto -s -Wl,-s -Wl,--gc-sections)
endif()


此外,在构建之后,您可以使用stripupx等实用程序。要在构建之后添加它们的执行,您需要编写以下代码:

add_custom_command(TARGET <executable> POST_BUILD
        COMMAND strip -s <path-to-executable>)
add_custom_command(TARGET <executable> POST_BUILD
        COMMAND upx -qqq --best <path-to-executable>
        # This might break the the executable:
#        COMMAND upx -qqq --best --ultra-brute --overlay=strip <path-to-executable>
)


请注意,upx工具压缩了可执行文件,因此将其加载到内存中所需的时间将比平时长。

相关问题