如何在所有构建之前执行 运行 命令?

How to run command before all build?

我们有遗留项目,它使用专有构建系统。我们想将它移植到 CMake。 在构建步骤之前,我们有脚本,它根据源文件中的注释生成代码。

我尝试使用 add_custom_targetadd_custom_command 嵌入它,但失败了,因为

  1. 脚本应该 运行 在所有构建之前(它不应该 运行 与其他目标并行)
  2. 我们有很多小库,都依赖这个脚本,但是应该运行只有一次

目前我的设置如下。


add_library(${PROJECT_NAME} INTERFACE)
....

target_link_libraries(${PROJECT_NAME} ${MANY_SMALL_LIBRARIES})

我无法为接口库添加 PRE_BUILD 步骤。

我大致是这样解决的

add_custom_command(
        OUTPUT a_done
        COMMAND touch a_done
        COMMAND ${CMAKE_SOURCE_DIR}/a.sh
        COMMENT "Doing a.sh"
)

add_custom_command(
        OUTPUT b_done
        COMMAND touch b_done
        COMMAND ${CMAKE_SOURCE_DIR}/b.sh
        COMMENT "Doing b.sh"
)

# Execute our custom scripts in following order (in case of sequential build)
add_custom_target(SCRIPTS ALL DEPENDS 
    a_done 
    b_done 
)

add_dependencies(target_1 SCRIPTS)
...
add_dependencies(target_N SCRIPTS)