cmake使用strip减少动态库的大小

Home / C++ 百晓生 2022-3-21 4302

构建事件

这种场景是:为某个目标(库或可执行程序)添加一个定制命令。

这种定制命令可以设置在,构建这个目标过程中的某些时机。这种场景可以在目标构建的过程中,添加一些额外执行的命令。这些命令本身将会成为该目标的一部分。注意,仅在目标本身被构建过程才会执行。如果该目标已经构建,命令将不会执行。

那么这些时机是什么呢?如下表所示:

参数含义
PRE_BUILD在目标中执行任何其他规则之前运行
PRE_LINK在编译源代码之后,链接二进制文件或库文件之前运行
POST_BUILD在目标内所有其他规则均已执行后运行

参数含义

PRE_BUILD在目标中执行任何其他规则之前运行

PRE_LINK在编译源代码之后,链接二进制文件或库文件之前运行

POST_BUILD在目标内所有其他规则均已执行后运行

其中,PRE_BUILD只被Visual Studio 7及之后的版本支持,其他情况下PRE_BUILD都被视为PRE_LINK。

此时的命令为:

add_custom_command(TARGET <target>
                   PRE_BUILD | PRE_LINK | POST_BUILD
                   COMMAND command1 [ARGS] [args1...]
                   [COMMAND command2 [ARGS] [args2...] ...]
                   [BYPRODUCTS [files...]]
                   [WORKING_DIRECTORY dir]
                   [COMMENT comment]
                   [VERBATIM] [USES_TERMINAL])

其中set(CMAKE_STRIP "strip")和add_custom_command是关键

如果是嵌入式系统,CMAKE_STRIP需要对应的交叉编译工具链的strip

例如:

set(CMAKE_STRIP /usr/local/x86_64/***strip)
add_custom_command(
      TARGET
      ${PROJECT_NAME}
      POST_BUILD
      COMMAND ${CMAKE_STRIP} -s ${PROJECT_NAME}
)
set(CMAKE_STRIP /usr/local/x86_64/***strip)
project(hello)
……
add_subdirectory(sub)
……
target_link_libraries( ${PROJECT_NAME} sub)
add_custom_command(
      TARGET
      ${PROJECT_NAME}
      POST_BUILD
      COMMAND ${CMAKE_STRIP} -s ${PROJECT_NAME}
      COMMENT "Strip debug symbols done on final binary.")


本文链接:https://www.it72.com/12713.htm

推荐阅读
最新回复 (0)
返回