如何为条形文件配置cmake

How to config cmake for strip file

本文关键字:文件 配置 cmake      更新时间:2023-10-16

当我在发布模式中使用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")

但是,如果你不想改变你的构建系统,还有一个技巧(弄清楚上面的行的确切位置可能很棘手)。您可以将strip用作独立的应用程序,例如:

strip -s a.out

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

您可以尝试

set_target_properties(TARGET_NAME PROPERTIES LINK_FLAGS_RELEASE -s)

使用add_link_options()set_target_properties()添加-s应该可以正常工作,此外,如果您的目标(参考)至少有一个install()命令,CMake会创建install/strip目标,该目标也可以用于对二进制文件进行条带化。

示例:

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

这很好用:

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