从autotool迁移到cmake:在构建target之前之后跑一些shell脚本

虽然不想跑shell脚本,因为换到windows上又得写一份bat脚本,非常麻烦。
但是有时候不这么做不行,只能把生成的文件加入到git中,也麻烦。

在构建target之前跑shell脚本

    execute_process(
            COMMAND sh gen_c_source.sh ${CMAKE_BINARY_DIR}
            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
            COMMAND_ECHO STDOUT
    )

这个其实不能真的说是构建之前跑的shell脚本,它应该是cmake解析到这个位置,就把这个命令执行了。比如说在我的这个场景里,cmake构建target依赖我这里生成的c源代码,如果是推迟到编译之前,这个target就没法形成。

在构建target之后跑shell脚本

    add_custom_command(
            TARGET gen-scmconfig
            COMMAND gen-scmconfig > ${CMAKE_BINARY_DIR}/libguile/scmconfig.h
            COMMAND cd ${CMAKE_SOURCE_DIR} && sh gen_dot_x.sh ${CMAKE_BINARY_DIR}
            COMMENT "Now Generating libguile/scmconfig.h file"
    )

这个的确是在编译完target之后跑的shell脚本
add_custom_command文档在
https://cmake.org/cmake/help/v3.18/command/add_custom_command.html
这里用的签名是

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]
                   [COMMAND_EXPAND_LISTS])

你可能感兴趣的:(autotool,cmake)