如何为条形文件配置cmake

新手上路,请多包涵

当我在发布模式下使用 cmake 时,我有以下二进制文件:

 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=485ac09b0a3aa879f88b7f5db6c00ea8d8e1eaf6, not stripped

我希望剥离二进制文件。我如何以一种干净的方式对 cmake 说将 -s 选项添加到我的编译器以使其剥离?

为什么默认发布模式没有剥离我的二进制文件?

原文由 Fractale 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 927
2 个回答

最简洁的方法是修改 CFLAGS 或 CXXFLAGS(取决于 C 或 C++ 代码)

 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")

但是,如果您不想更改构建系统,还有另外一种技巧(弄清楚将上述行放在何处可能会很棘手)。您可以将 strip 用作独立应用程序,例如:

 strip -s a.out

并在可执行文件准备好作为构建后步骤发布后执行此操作。我发现这种方式更干净,然后扰乱了编译器标志。

原文由 Konstantin Vladimirov 发布,翻译遵循 CC BY-SA 3.0 许可协议

Using add_link_options() or set_target_properties() to add -s should work fine, additionally, CMake creates an install/strip target which also could be used for striping the如果您的目标 (参考) 至少有一个 install() 命令,则为二进制。

例子:

 $ cmake --build . --config Release --target install/strip

原文由 Gary Wang 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题