我用Visual Studio做了一个C++程序,可执行文件的大小是490 KB。但是,当我通过在Visual Studio中创建CMake Project来创建相同的可执行文件时,可执行文件的大小为1140 KB。为什么这么大?
Visual Studio
C++
490 KB
CMake Project
1140 KB
ars1skjm1#
我发现CMake正在运行RelWithDebInfo构建。set(CMAKE_BUILD_TYPE Release)解决了我的问题。可执行文件的大小减少到483 KB。
RelWithDebInfo
set(CMAKE_BUILD_TYPE Release)
483 KB
clj7thdc2#
可执行文件的大小取决于所使用的优化和可执行文件中保留的符号。通常,构建模式对大小的影响最大。默认情况下,CMake通常会为每种构建类型提供设置,但您可以通过调整CMAKE_BUILD_TYPE变量来自定义它们。举例来说:
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模式。像这样:
MinSizeRel
if (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") target_compile_options(<executable> PRIVATE -Os -flto -s -Wl,-s -Wl,--gc-sections) endif()
型此外,在构建之后,您可以使用strip和upx等实用程序。要在构建之后添加它们的执行,您需要编写以下代码:
strip
upx
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工具压缩了可执行文件,因此将其加载到内存中所需的时间将比平时长。
2条答案
按热度按时间ars1skjm1#
我发现CMake正在运行
RelWithDebInfo
构建。set(CMAKE_BUILD_TYPE Release)
解决了我的问题。可执行文件的大小减少到483 KB
。clj7thdc2#
可执行文件的大小取决于所使用的优化和可执行文件中保留的符号。
通常,构建模式对大小的影响最大。默认情况下,
CMake
通常会为每种构建类型提供设置,但您可以通过调整CMAKE_BUILD_TYPE
变量来自定义它们。举例来说:
字符串
如果你想尽可能地减少可执行文件的大小,我建议使用
MinSizeRel
模式。像这样:型
此外,在构建之后,您可以使用
strip
和upx
等实用程序。要在构建之后添加它们的执行,您需要编写以下代码:型
请注意,
upx
工具压缩了可执行文件,因此将其加载到内存中所需的时间将比平时长。