构建事件
这种场景是:为某个目标(库或可执行程序)添加一个定制命令。
这种定制命令可以设置在,构建这个目标过程中的某些时机。这种场景可以在目标构建的过程中,添加一些额外执行的命令。这些命令本身将会成为该目标的一部分。注意,仅在目标本身被构建过程才会执行。如果该目标已经构建,命令将不会执行。
那么这些时机是什么呢?如下表所示:
参数 | 含义 |
---|
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://it72.com/12713.htm