c++ - CMake:发布版本的平台独立二进制剥离
问题描述
如何将二进制剥离添加到CMake
forgcc
和clang
作为后处理步骤,但仅在发布版本中?MSVC
默认情况下剥离,因此不必处理。
问题之一是clang
没有-s
编译标志,但gcc
这样做是行不通的。
另一个想法是使用 strip 命令。-s
开关再次存在Linux
但不存在XCode
(这是开发Apple
工具链)。
所以最后的选择是使用strip
除了二进制本身之外没有任何参数的命令,这似乎是一个不错的通用解决方案。这怎么能用在CMake
?
解决方案
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/strip
on Linux
)。生成器$<$<CONFIG:cfg>:str>
表达式将str
在构建配置时扩展为cfg
,否则为空字符串。在这种情况下,这直接意味着“在 Release 中构建时调用 strip,否则什么也不做”。请注意,CONFIG
生成器对您的构建类型不区分大小写,并且在使用多配置生成器时可以工作。
推荐阅读
- sql-server - T-SQL UDF 聚合函数
- html - 文本是多行时如何消除多余的空间
- javascript - react redux reducer中缺少数组
- php - 将任何base64文件转换为文件并移动到php / Symfony 4中的目标路径
- jekyll - 设置 url 后服务器地址更改
- reactjs - Reactjs - Webpack 构建错误:错误:插件/预设文件不允许导出对象,只有函数
- sql-server-2008 - 将表格结果转换为 JSON 格式
- python - 如何更简单地相互减去所有熊猫数据框元素?
- javascript - 在通过 JavaScript 的 Canvas 中,如何将对象移动到不同的坐标?
- postgresql - 有条件地从一个表插入到另一个表中