[英]How to config cmake for strip file
当我在 Release 模式下使用 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($<$<CONFIG:RELEASE>:-s>)
使用add_link_options()
或set_target_properties()
添加-s
应该可以正常工作,此外,CMake 创建一个install/strip
目标,如果您的目标至少有一个install()
命令,该目标也可用于条带化二进制文件(参考) .
示例:
$ cmake --build . --config Release --target install/strip
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.