工具与软件:
您好!
我已经看到了与 makefile 调制相关的文章、以获得 git 标签版本并将其用作环境变量(参考: e2e.ti.com/.../ccs-msp430fr5969-storing-a-symbol-value-before-building)。 我一直在尝试设置预编译步骤、但我目前无法产生结果。 是否可以获得有关如何扩展 make 文件以获取 git 标记版本的教程?
此致、
David
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
您好!
我已经看到了与 makefile 调制相关的文章、以获得 git 标签版本并将其用作环境变量(参考: e2e.ti.com/.../ccs-msp430fr5969-storing-a-symbol-value-before-building)。 我一直在尝试设置预编译步骤、但我目前无法产生结果。 是否可以获得有关如何扩展 make 文件以获取 git 标记版本的教程?
此致、
David
尊敬的 David:
[quote userid="553972" url="~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1487694/msp430fr5969-tutorial-on-how-to-extend-the-makefile-functionality 是否可以获得一个关于如何扩展 make 文件以获得 git 标记版本的教程?我不知道有任何此类教程。 这不是我们在 CCS 中本身支持的功能。 也许社区中的某个人会分享一个解决方案。
Ki
您好 Ki、
我一直在使用能够执行任务的 bash 脚本、但无法正确定义 v git_tag 符号。 我可以获得 git 标记版本并将其复制到 txt 中,但我无法定义所需的 syumbol,也许你可以帮助我?
我仍然在学习如何通过.bat 文件调整编译器选项、但我认为它没有问题、直到编译器标记设置和符号定义。
此致、
David
@echo off
setlocal enabledelayedexpansion
REM Get Git version information
for /f "tokens=*" %%i in ('git describe --long --dirty --tags 2^>nul') do set GIT_DESCRIBE=%%i
REM Check if git describe command worked
if "%GIT_DESCRIBE%"=="" (
echo WARNING: Git command failed or no tags found. Using default values.
set GIT_DESCRIBE=v0.0.0-0-dev-dirty
)
REM Split the git describe output into components
set "version=%GIT_DESCRIBE:-= %"
REM Extract components
for /f "tokens=1,2,3,4" %%a in ("%version%") do (
set VERSION_TAG=%%a
set COMMITS_PAST=%%b
set COMMIT=%%c
set DIRTY=%%d
)
REM Initialize build info variables
set "BUILD_INFO_COMMITS="
set "BUILD_INFO_DIRTY="
REM Add commits info if not zero
if NOT "%COMMITS_PAST%"=="0" (
set "BUILD_INFO_COMMITS=.%COMMITS_PAST%"
)
REM Add dirty marker if present
if NOT "%DIRTY%"=="" (
set "BUILD_INFO_DIRTY=+"
)
REM Combine build info
set "BUILD_INFO=%COMMIT%%BUILD_INFO_COMMITS%%BUILD_INFO_DIRTY%"
REM Get build environment information
for /f "tokens=*" %%d in ('date /T') do set DATE=%%d
for /f "tokens=*" %%t in ('time /T') do set TIME=%%t
set "BUILD_DATE=%DATE%, %TIME%"
for /f "tokens=*" %%u in ('echo %username%') do set USERNAME=%%u
for /f "tokens=*" %%h in ('hostname') do set HOSTNAME=%%h
set "BUILD_MACHINE=%USERNAME%@%HOSTNAME%"
REM Display build information
echo Build Time: %BUILD_DATE%
echo Build Version: %VERSION_TAG%
echo Build Info: %BUILD_INFO%
REM Create compiler flags
set "GEN_OPTS__FLAG=--define=VERSION_TAG=\"%VERSION_TAG%\" --define=VERSION_BUILD_INFO=\"%BUILD_INFO%\" --define=VERSION_BUILD_MACHINE=\"%BUILD_MACHINE%\" --define=VERSION_BUILD_DATE=\"%BUILD_DATE%\""
REM Create a variables file that can be included in other batch files
echo @echo off > version_vars.bat
echo set "VERSION_TAG=%VERSION_TAG%" >> version_vars.bat
echo set "BUILD_INFO=%BUILD_INFO%" >> version_vars.bat
echo set "BUILD_MACHINE=%BUILD_MACHINE%" >> version_vars.bat
echo set "BUILD_DATE=%BUILD_DATE%" >> version_vars.bat
echo set "GEN_OPTS__FLAG=%GEN_OPTS__FLAG%" >> version_vars.bat
REM Create a variables file for makefile inclusion
echo VERSION_TAG=%VERSION_TAG% > version_vars.mk
echo BUILD_INFO=%BUILD_INFO% >> version_vars.mk
echo BUILD_MACHINE=%BUILD_MACHINE% >> version_vars.mk
echo BUILD_DATE=%BUILD_DATE% >> version_vars.mk
echo GEN_OPTS__FLAG=%GEN_OPTS__FLAG% >> version_vars.mk
echo.
echo Variables have been written to:
echo - version_vars.bat (for batch files)
echo - version_vars.mk (for makefiles)
echo.
echo To use in the current command prompt session, run:
echo call version_vars.bat
endlocal & (
REM Export variables outside of the local scope
set "VERSION_TAG=%VERSION_TAG%"
set "BUILD_INFO=%BUILD_INFO%"
set "BUILD_MACHINE=%BUILD_MACHINE%"
set "BUILD_DATE=%BUILD_DATE%"
set "GEN_OPTS__FLAG=%GEN_OPTS__FLAG%"
)我一直在使用 bash 脚本
使用 bash、您必须显式地将内容导出到子进程。 如果你不这样做,那么使将永远看不到它们。 您可以一次性完成所有功能。
在我的.bashrc 中找到隐藏:
导出 MSP430_GCC_INCLUDE_DIR=/usr/ti/gcc/include
David、您好!
感谢您的答复、您能进一步解释一下我将通过该命令完成哪些工作吗?
此外,正确我如果我错了,子进程应该是 CCS 运行的 bnash 脚本,因此,我应该把符号导出到父进程 isntead? 我正在使用预编译步骤、我认为这就像一个单独的 make 命令、并且我 sohuld 使预编译步骤和实际编译过程之间的互连在顶部向编译器发送符号。
此致、
David
我不知道 CCS 在做什么、但子进程几乎不可能更改父进程的环境变量。 您可以对其进行筛选、正如最近在 Hackaday 上发表的一篇文章中所展示的那样。 虽然这主要是为了防止 bash 启动子进程来运行脚本。