CMake:用于发行版本的独立于平台的二进制剥离

Bul*_*aza 5 c++ strip cmake

您如何才能为CMakefor gccclang作为后处理步骤添加二进制剥离,但仅在发行版中?MSVC默认情况下会删除,因此不必进行处理。

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

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

因此,最后的选择是使用该strip命令,除了二进制本身之外,不带任何参数,而二进制本身似乎是一个不错的通用解决方案。如何使用CMake

Bul*_*aza 5

在中CMake add_custom_command可以执行构建后命令,例如strip。该PROJECT_NAME变量定义为目标二进制文件,例如

# Set the project name
set(PROJECT_NAME "MyProject")
project(${PROJECT_NAME})
Run Code Online (Sandbox Code Playgroud)

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

# Strip binary for release builds
if (CMAKE_BUILD_TYPE STREQUAL Release)
    add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
            COMMAND ${CMAKE_STRIP} ${PROJECT_NAME})
endif ()
Run Code Online (Sandbox Code Playgroud)

CMAKE_BUILD_TYPE指示生成类型像DebugReleaseCMAKE_STRIP是文件路径平台的strip实用程序(如/usr/bin/stripLinux)。