如何在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
相关产品推荐
相关产品推荐

