【发布时间】:2017-05-25 09:02:26
【问题描述】:
我有一大堆多线程源代码,其中包括五个静态链接库(这也是相同解决方案的一个项目)。我使用 CMake 工具(版本 3.7.1)为 MSVC(VS2015)和 Linux 的 Makefile(Unix Makefiles)生成解决方案。由于它必须在多个平台上运行,所有平台特定的头文件都单独包含。
我大部分时间都在 Windows 构建上工作更多,优化价值为
set(CMAKE_CXX_FLAGS_RELEASE "/MT /O2")
set(CMAKE_CXX_FLAGS_DEBUG "/MTd /O0")
对于 Linux
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions -fpermissive -Os")
但二进制文件的大小差异很大。在 Windows 上为 1,698KB,在 Linux 上为 17121988 字节,大约 16MB。
由于有两个不同的构建选项(发布和调试),我们有类似于 Linux 的。如果是这样,应该如何区分这些构建选项。
我也使用add_definition("-W -Wall -Wextra -Wno-unused-parameter -Wno-overloaded-virtual -Wconversion -ggdb")
如何最小化 Linux 二进制文件的大小。我看过类似的帖子,但问题对我来说反之亦然。
【问题讨论】:
-
CMAKE_CXX_FLAGS的三种形式有点不透明。您可能想要扩展隐藏在它们后面的标志。事实上,添加生成的完整命令行将消除所有歧义。 -
@user4581301:-fexceptions -fpermissive -Os。除了这三个之外,我在 Linux 和 Windows 上构建时没有看到任何东西 "/DWIN32 /D_WINDOWS /W3 /GR /EHsc /MP"
-
目标处理器(x86、ARM、...)和地址大小(32 位或 64 位)也会影响二进制文件的大小。
标签: c++ linux visual-studio-2015