如何在所有构建之前执行 运行 命令?
How to run command before all build?
我们有遗留项目,它使用专有构建系统。我们想将它移植到 CMake。
在构建步骤之前,我们有脚本,它根据源文件中的注释生成代码。
我尝试使用 add_custom_target
、add_custom_command
嵌入它,但失败了,因为
- 脚本应该 运行 在所有构建之前(它不应该 运行 与其他目标并行)
- 我们有很多小库,都依赖这个脚本,但是应该运行只有一次
目前我的设置如下。
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)
我们有遗留项目,它使用专有构建系统。我们想将它移植到 CMake。 在构建步骤之前,我们有脚本,它根据源文件中的注释生成代码。
我尝试使用 add_custom_target
、add_custom_command
嵌入它,但失败了,因为
- 脚本应该 运行 在所有构建之前(它不应该 运行 与其他目标并行)
- 我们有很多小库,都依赖这个脚本,但是应该运行只有一次
目前我的设置如下。
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)