"C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
在构建时,我可以看到正确的修订号被返回到output
控制台。现在的问题是,如何将这个值存储到一个变量中,在代码中使用?
我已经尝试定义一个预编译器变量(
_SVNREV
)并使用它来保存上述命令的结果,直接从pre-build
事件框中获取,但这不起作用。_SVNREV="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
%_SVNREV%="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
%_SVNREV="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
$(_SVNREV)="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
这些都实际上不起作用。
解决方案: 在VS环境中尝试更新变量没有任何进展,所以我选择了另一种方法,在构建前调用一个脚本,获取工作副本的svn版本,然后创建包含该信息的头文件。
这是svnrev.bat
,如果有兴趣可以看看:
@echo off
set cmd="C:\"Program Files\CollabNet\Subversion Client"\svnversion.exe -n %1 "
set versionfile=%1/version.h
FOR /F %%i IN ('%cmd%') DO SET SVNVER=%%i
echo Detected program revision %SVNVER% in %1
echo #pragma once > %versionfile%
echo #define _SVNVER "%SVNVER%" >> %versionfile%