Forum: PC-Programmierung Linux GCC Builddate per Makfile


von Markus C. (ljmarkus)


Lesenswert?

Guten Morgen..

in meinem Programm habe ich folgende def:
1
extern char    __BUILD_DATE;
2
3
int main()
4
{
5
  printf("Build date: %u\n",(unsigned long) &__BUILD_DATE);
6
}

Wie muss das makefile aussehen damit das aktuelle Builddatum 
drinnensteht?

makefile:
1
CC_LINUX = gcc
2
WARN = -Wall
3
CFLAGS = std=gnu99
4
5
TARGET_LINUX = test
6
SRC = test.c
7
8
linux:
9
  $(CC_LINUX) $(SRC) -o $(TARGET_LINUX) $(CFLAGS)

Vielen Dank,
Markus

von Rolf Magnus (Gast)


Lesenswert?

Markus C. schrieb:
> Wie muss das makefile aussehen damit das aktuelle Builddatum
> drinnensteht?

Nunja, bei dem obigen Code wäre das schwierig, denn du müßtest eine 
Variable anlegen, deren Adresse dem Builddatum entspricht. ;-)

Markus C. schrieb:
> extern char    __BUILD_DATE;

Hier hast du eine Variable, die genau ein einzelnes Byte aufnehmen kann.

> int main()
> {
>   printf("Build date: %u\n",(unsigned long) &__BUILD_DATE);

Hier gibst du die Adresse dieser Variablen aus.

> }

von daniel (Gast)


Lesenswert?

DATE=$(shell date)


main:
<tab>gcc -DDATE main.c



char date[] = DATE;



Ungefahr so würde ich das probieren.

von Andreas B. (andreas_b77)


Lesenswert?

Mach statt einer Variable ein Define, das kann man auch über die 
Kommandozeile erzeugen.
1
CFLAGS = -std=gnu99 -D __BUILD_DATE='"$(shell date)"'

Dann im printf entweder auf %s ändern um den String einzufügen oder den 
String gleich kombinieren. Allerdings wird date das aktuelle Datum ohne 
weitere Optionen in der aktuell eingestellten Sprache ausgeben.

von daniel (Gast)


Lesenswert?

Edit

main: <tab>gcc -DDATE=$(DATE) main.c

von Markus C. (ljmarkus)


Lesenswert?

Hallo,

habe es jetzt so gemacht:
1
PROG_BUILD_NUM=.build_numer
2
BUILD_DATE = $(shell date +'%Y%m%d')
3
BUILD_NUM = $(shell cat $(PROG_BUILD_NUM))
4
5
CC_ARM = /usr/local/arm/fs-toolchain-4.4.3/bin/arm-linux-gcc
6
CC_ICNOVA = /home/markus/ICnova_clean/ICnova/build_arm/staging_dir/usr//bin/arm-linux-gcc
7
CC_LINUX = gcc
8
WARN = -Wall
9
CFLAGS = -std=gnu99
10
11
TARGET_LINUX  = programm_i686
12
TARGET_ARM    = programm_arm
13
TARGET_ICNOVA = programm_icnova
14
15
SRC = main.c
16
17
i686:  BUILD_INFO build_i686
18
arm:  BUILD_INFO build_arm
19
icnova:  BUILD_INFO build_icnova
20
21
22
BUILD_INFO:
23
  @echo Increment build number
24
  @if ! test -f $(PROG_BUILD_NUM) ; then echo 0 > $(PROG_BUILD_NUM); fi
25
  @echo $$(($$(cat $(PROG_BUILD_NUM)) + 1)) > $(PROG_BUILD_NUM)
26
  @echo "#define BUILD_NUM $(BUILD_NUM)\n#define BUILD_DATE" $(BUILD_DATE) > appVersion.h
27
  
28
build_i686:
29
  $(CC_LINUX) $(SRC) -o $(TARGET_LINUX) $(CFLAGS)
30
build_arm:
31
  $(CC_ARM) $(WARN) -o $(TARGET_ARM) $(SRC)
32
build_icnova:
33
  $(CC_ICNOVA) $(SRC) -o $(TARGET_ICNOVA) $(CFLAGS)

lg, markus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.