2025-03-27 3:08 PM - last edited on 2025-03-28 12:37 PM by mƎALLEm
Hi All,
I need to obtain an artifact with the name present in some costant in "main.h".
In other words, my project is called "TestProject" and main.h I have these costants:
#define GUI_MAJOR_VER 0 // Major
#define GUI_MINOR_VER 1 // Minor
#define GUI_RELEASE_VER 3 // Release
I would like to ahve a final executable named "TestProject v013.hex"
This means that every time I will change the #defines in main.h, output file will change automatically with a new numeration.
Does someone has some suggestion? or better, an example?
thanks in advance for your help.
2025-03-27 3:24 PM
Sure, you can do this in post-build action: Extract the version numbers from the .h file, then copy or rename the hex file.
Post-build action can be a "unix" shell script (sh is provided in the CubeIDE environment) so we don't have to **** with ******* bat files.
2025-03-28 1:00 AM
HI @Pavel A. ,
thanks for suggestion but I should want a practical example to copy the various instructions.
you told about ready scripts on CubeIDE: can you sueggest to me the folder?
Do I need to search for *.bat files? or on makefiles?
thanks.
2025-03-28 8:19 AM - edited 2025-03-28 8:20 AM
Apologies for been not clear enough. There are no ready examples of such scripts. I only said that we can use the normal "unix" shell tool, even on Windows. Which is easier than dreadful bat files.
The post-build command goes into the project settings:
As you see, CubeIDE variables can be used in the commands, with ${...} syntax.
2025-03-28 9:25 AM
Ok, now I understood that I need to use post-build section on project settings.
My problem is that I don't know the syntax that I must insert on the command string.
For example How can extract values form main.h? and, How can I compose a new filename?
in other words, this is my first time for this problem and I need a reference guide/example to learn the various command to be autonomous.
Do you kwnow same link for the references?
Thanks
2025-03-28 11:34 AM
Hmm. Extracting version numbers from the .h file can be done with "awk" for example. Perhaps ask the AI ? ))
2025-03-28 11:49 AM
You could also just write a native command line application.
One that could take the file name as a command line parameter, use fopen(), fseek(), ftell(), fread() etc, like a C coder, do file manipulation and naming there.
I'm not sure you'd be able to fish out the source files, but the .BIN you could go search the binary for a tag where you embedded this data. Or perhaps parse the .ELF and pull things out of that as symbols, or pre-processor MACROs
2025-03-28 1:09 PM - edited 2025-03-29 11:35 AM
To get the version as string: make a small C file, for example ver.c ver.h [edited - use .h suffix so that Eclipse won't add it to the project as a source file]
#include "main.h"
#define STRINGIFY(w) #w
#define MAKEVERS(x, y, z) STRINGIFY(x) "." STRINGIFY(y) "." STRINGIFY(z)
MAKEVERS(GUI_MAJOR_VER, GUI_MINOR_VER, GUI_RELEASE_VER)
Then preprocess this file and filter junk out:
gcc -E -P ver.h | sed '/^[ \t]*$/d; s/[ \t\"]//g'
Here you get the version suffix string, like "0.1.3"
2025-03-28 2:15 PM - edited 2025-03-28 2:45 PM
hi @Pavel A. ,
I create "version.c"
I inserted these in pre-build:
And I obtain an error:
But I'm in trouble with the compiler in use:
trying to put on post-build command
I get this error:
2025-03-28 3:04 PM
Hi @Pavel A. ,
maybe I have done a little bit of confusion.
After reading for 100 times your original message, maybe I understood the right steps to do :
right click on "version.c" -> proprieties -->settings --> build Steps..
In this way everything is compiling without any error, but Output file has still the project name.