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

如何在Visual Studio预生成事件中为Fortran项目添加Git版本信息

Fortran项目预生成事件:为Git宏添加引号解决编译错误

问题背景

在Windows Visual Studio环境下,通过预生成事件的批处理命令生成gitparams.h,用于在Fortran代码中注入Git版本和分支信息。原命令生成的宏值未包含双引号,导致Fortran编译时出现语法错误:

error #5143: Missing mandatory separating blankSyntax error, found IDENTIFIER 'C3' when expecting one of: :: ) , : * <END-OF-STATEMENT> ; . (/ + - ] /) ' ** / // > PRIVATE ...

原预生成命令:

echo | set /p dummyName=#define GITVERSION > gitparams.h
git describe --dirty --always --tags >> gitparams.h

echo | set /p dummyName=#define GITBRANCH >> gitparams.h
git branch --show-current >> gitparams.h

生成的gitparams.h(无引号导致问题):

#define GITVERSION 61154c3-dirty
#define GITBRANCH main

Fortran引用代码:

#include "gitparams.h"

#if defined(GITVERSION)
    Character(32) :: GlobalRevisionNumber = GITVERSION
#else
    Character(32) :: GlobalRevisionNumber = "unknown"
#endif

解决方案

修改批处理命令,通过for /f捕获Git命令的输出,并为宏值包裹双引号。替换后的预生成命令如下:

:: 生成GITVERSION宏(覆盖写入gitparams.h)
for /f "delims=" %%g in ('git describe --dirty --always --tags') do echo #define GITVERSION "%%g" > gitparams.h

:: 生成GITBRANCH宏(追加写入gitparams.h)
for /f "delims=" %%g in ('git branch --show-current') do echo #define GITBRANCH "%%g" >> gitparams.h

效果验证

修改后生成的gitparams.h会包含带引号的宏值,符合Fortran字符串语法要求:

#define GITVERSION "61154c3-dirty"
#define GITBRANCH "main"

此时Fortran代码编译时,GITVERSION会被正确展开为带引号的字符串,避免语法错误。

命令说明

  • for /f "delims=" %%g in ('命令'):捕获Git命令的完整输出(delims=确保包含空格的分支名也能被完整捕获)
  • echo #define GITVERSION "%%g":将宏定义与带引号的Git输出拼接后写入文件
  • > 用于覆盖创建文件,>> 用于追加内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:56:17