You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CMake生成*.pbxproj后自动运行Shell脚本?

针对CMake生成Xcode工程后自动执行Shell脚本的解决方案

方案1:用add_custom_target关联Xcode工程文件

直接将自定义目标依赖于生成的.pbxproj文件,确保脚本在工程文件生成后执行:

# 定义自定义目标,指定脚本路径
add_custom_target(
    RunPostGenScript
    ALL
    COMMAND /path/to/your/script.sh
    COMMENT "Running post-generation shell script..."
)

# 指向生成的Xcode工程文件(替换为你的工程名)
set(XCODE_PROJECT_FILE "${CMAKE_BINARY_DIR}/YourProject.xcodeproj/project.pbxproj")

# 让自定义目标依赖pbxproj文件
add_dependencies(RunPostGenScript "${XCODE_PROJECT_FILE}")

这种方式会在.pbxproj生成完成后触发脚本执行,Xcode控制台会显示COMMENT中的提示信息。

方案2:利用CMake生成后事件钩子(CMake 3.17+)

通过生成标记文件确保脚本只在生成阶段结束后执行一次:

set(PROJECT_POST_SCRIPT "/path/to/your/script.sh")

add_custom_command(
    OUTPUT "${CMAKE_BINARY_DIR}/.post_gen_marker"
    COMMAND "${PROJECT_POST_SCRIPT}"
    COMMAND touch "${CMAKE_BINARY_DIR}/.post_gen_marker"
    COMMENT "Executing post-generation script"
)

add_custom_target(
    PostGen ALL
    DEPENDS "${CMAKE_BINARY_DIR}/.post_gen_marker"
)

标记文件会作为依赖项,避免脚本在后续CMake重新配置时重复执行。

方案3:全局CMake钩子脚本

创建全局钩子脚本,在所有CMake生成流程末尾触发脚本:

  1. 新建post_gen_hook.cmake文件:
if(XCODE)
    execute_process(
        COMMAND /path/to/your/script.sh
        WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
        RESULT_VARIABLE SCRIPT_RESULT
    )
    if(NOT SCRIPT_RESULT EQUAL 0)
        message(WARNING "Post-generation script failed with exit code ${SCRIPT_RESULT}")
    endif()
endif()
  1. 在主CMakeLists.txt中引入:
set(CMAKE_PROJECT_INCLUDE "${CMAKE_SOURCE_DIR}/post_gen_hook.cmake")

此方案会在CMake配置完成、工程文件生成后自动执行脚本。

方案4:给Xcode添加预构建阶段

通过CMake给Xcode工程添加预构建阶段,利用首次构建必然在工程生成后的特性:

if(XCODE)
    add_custom_command(
        TARGET ${PROJECT_NAME}
        PRE_BUILD
        COMMAND /path/to/your/script.sh
        COMMENT "Running pre-build script (post Xcode generation)"
    )
endif()

脚本会在Xcode首次构建前执行,满足工程生成后自动运行的需求,且Xcode控制台会清晰展示执行日志。


内容的提问来源于stack exchange,提问作者Jiri Zaloudek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:42:37