如何为条带文件配置cmake

How to config cmake for strip file

当我在发布模式下使用 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 选项添加到我的编译器以使其被删除?

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

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

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

但是如果您不想更改您的构建系统,还有另外一种 hack(找出放置在上面的行的确切位置可能会很棘手)。您可以将 strip 用作独立应用程序,例如:

strip -s a.out

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

你可以试试

set_target_properties(TARGET_NAME PROPERTIES LINK_FLAGS_RELEASE -s)

这很好用:

add_link_options($<$<CONFIG:RELEASE>:-s>)

使用 add_link_options()set_target_properties() 添加 -s 应该可以正常工作,此外,CMake 创建一个 install/strip 目标,如果您至少有一个 install() 目标命令 (reference).

示例:

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