K-4U
"We cannot solve our problems with the same thinking we used when we created them." - Albert Einstein
Is het mogelijk om in mijn makefile een buildnummer steeds met 1 te laten verhogen?
Ik zit vaker met het probleem dat mijn software niet correct gebuild wordt. Nu wil ik dit graag oplossen door een build nummer mee te sturen.
Kan ik dit in een makefile doen en deze 'constante' daarna in mijn code weer aanroepen?
Google eens op 'rcsid'. Moet je wel subversion voor gebruiken voor versiebeheer van je code (tenslotte is dat waar je uiteindelijk in geintesseerd bent, niet in hoevaak je iets gecompileerd hebt)
[Bericht gewijzigd door alex278 op (37%)]
K-4U
"We cannot solve our problems with the same thinking we used when we created them." - Albert Einstein
Ik gebruik wel subversion, maar ik ga niet voor elke build een revisie maken. Dat is mij te lastig en zo zit ik binnen no-time op 500 revisies..
Edit:
Ik heb in AVR Studio 5 iets gevonden over een Pre-build event.
Helaas is dit de logfile van de build:
------ Build started: Project: Ledstrip, Configuration: Debug AVR ------
Build started.
Project "Ledstrip.avrgccproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\AVR Studio 5.0\Vs\AvrGCC.targets" from project "C:\Repos\roomcontrol\Firmware\Ledstrip\Ledstrip.avrgccproj" (target "Build" depends on it):
Task "RunAvrGCC"
C:\Program Files (x86)\Atmel\AVR Studio 5.0\AVR ToolChain\bin\make.exe all
AVR Memory Usage
----------------
Device: attiny2313
Program: 970 bytes (47.4% Full)
(.text + .data + .bootloader)
Data: 58 bytes (45.3% Full)
(.data + .bss + .noinit)
Done executing task "RunAvrGCC".
Done building target "CoreBuild" in project "Ledstrip.avrgccproj".
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
Target "Build" in file "C:\Program Files (x86)\Atmel\AVR Studio 5.0\Vs\Avr.common.targets" from project "C:\Repos\roomcontrol\Firmware\Ledstrip\Ledstrip.avrgccproj" (entry point):
Done building target "Build" in project "Ledstrip.avrgccproj".
Done building project "Ledstrip.avrgccproj".Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
[Bericht gewijzigd door K-4U op (84%)]
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Ik doe altijd:
myprogram: build.h .... ...
build.h: doesnotexist
expr 1 + `cat .buildno` > buildno.tmp
mv buildno.tmp .buildno
echo #define BUILDNO `cat .buildno` > build.h
doesnotexist:
(ik ehb het zo maar even blind (= zonder te proberen) ingetikt er kunnen fouten inzitten.
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Ik heb zoiets een heel lang geleden gemaakt door domweg een klein programma (eenmalig) te maken (voorbeeld autoinc.exe) die een file leest en ophoogd.
Die file was een simpele headerfile met een regel bijvoorbeeld:
#define BUILDNR 1
Dan lees je de file, telt er een bij op en schrijf die terug.
In de C-file include je de autoincrement headerfile en gebruikt de constante.
De makerule voor dat target is bijvoorbeeld:
autoinc.h : <lijst van alle c-files in je project>
autoinc.exe autoinc.h
De C-file die de autoinc.h leest heeft natuurlijk autoinc.h als dependency.
edit: @rew, posten gekruist: komt ongeveer op hetzefde neer, jouw versie werkt natuurlijk alleen onder een Unix versie, tenzij je cygwin gebruikt onder windows.
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Waarempel, ik was toch effe benieuwd naar een variant van 'expr' onder windows.
Wat blijkt in de C:\WinAVR\Utils\bin directory staan een aantal Unix tools die voor windows gecompileerd zijn.
Hier dus nodig: expr, cat, mv
Kortom: Het voorbeeld van 'rew' werkt dus ook voor windows, wel effe die directory aan het PATH toevoegen.