首页 > 解决方案 > CMake:发布版本的平台独立二进制剥离

问题描述

如何将二进制剥离添加到CMakeforgccclang作为后处理步骤,但仅在发布版本中?MSVC默认情况下剥离,因此不必处理。

问题之一是clang没有-s编译标志,但gcc这样是行不通的。

另一个想法是使用 strip 命令。-s开关再次存在Linux但不存在XCode(这是开发Apple工具链)。

所以最后的选择是使用strip除了二进制本身之外没有任何参数的命令,这似乎是一个不错的通用解决方案。这怎么能用在CMake

标签: c++cmakestrip

解决方案


inCMake add_custom_command可以执行后期构建命令,例如strip. 该PROJECT_NAME变量被定义为您的目标二进制文件,例如

# Set the project name
set(PROJECT_NAME "MyProject")
project(${PROJECT_NAME})

add_executable在您的之后放置以下代码CMakeLists.txt

# Strip binary for release builds
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND $<$<CONFIG:release>:${CMAKE_STRIP} ${PROJECT_NAME}>)

CMAKE_STRIP是平台strip实用程序的文件路径(例如/usr/bin/stripon Linux)。生成器$<$<CONFIG:cfg>:str>表达式将str在构建配置时扩展为cfg,否则为空字符串。在这种情况下,这直接意味着“在 Release 中构建时调用 strip,否则什么也不做”。请注意,CONFIG生成器对您的构建类型不区分大小写,并且在使用多配置生成器时可以工作。


推荐阅读