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

CMake复制文件时替换字符串:将job.sh的占位符替换为项目名

解决方案

你可以通过以下两种常用方式实现复制文件+替换内容的需求,第一种configure_file是CMake为这类场景原生设计的命令,更推荐使用:

方案1:使用configure_file(推荐)

  1. 先修改项目根目录下的job.sh,将待替换标记$(REPLACEME)改成CMake默认识别的@PROJECT_NAME@格式(用@包裹可以避免和shell本身的${}格式变量冲突),修改后内容如下:
#!/bin/bash

#SBATCH --job-name=@PROJECT_NAME@
#SBATCH --tasks=4
#SBATCH --computers=1

run ./myApp
  1. 在CMakeLists.txt中添加如下配置:
# 第一个参数为源文件路径,第二个参数为build目录下的输出路径
# @ONLY参数表示仅替换@VAR@格式的标记,不会改动shell脚本中原有${}格式的内容
configure_file(${PROJECT_SOURCE_DIR}/job.sh ${PROJECT_BINARY_DIR}/job.sh @ONLY)

CMake执行时会自动将@PROJECT_NAME@替换为你通过project()命令指定的项目名称,同时完成文件复制。

方案2:无需修改原job.sh的实现

如果你不想改动原始job.sh的内容,保留$(REPLACEME)标记,可以通过「读取文件-字符串替换-写入目标路径」的流程实现:
在CMakeLists.txt中添加如下配置:

# 读取原始job.sh内容存入变量
file(READ ${PROJECT_SOURCE_DIR}/job.sh JOB_SH_CONTENT)
# 替换目标标记为项目名称
string(REPLACE "$(REPLACEME)" "${PROJECT_NAME}" JOB_SH_CONTENT "${JOB_SH_CONTENT}")
# 将替换后的内容写入build目录
file(WRITE ${PROJECT_BINARY_DIR}/job.sh "${JOB_SH_CONTENT}")
# 可选:给生成的脚本添加执行权限
file(CHMOD ${PROJECT_BINARY_DIR}/job.sh PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:15:03