Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » automake - header erstellen mit prefix als konstante

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.10.2006, 22:07 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
wie kann ich folgendes in etwa erstellen lassen:


C++:
//    set global prefix (normal /usr/local)
#define PREFIX "@prefix@"

//    set binary directory (normal /usr/local/bin)
#define BINDIR "@bindir@"

//    set data directory (normal /usr/local/share/s25rttr)
#define DATADIR "@datadir@/s25rttr"



die datei heißt local.h.in und hab die auch in AC_CONFIG_FILES mit "local.h" eingetragen. Sie wird auch generiert, nur ersetzt er mirs so:


C++:
//    set global prefix (normal /usr/local)
#define PREFIX "/usr/local"

//    set binary directory (normal /usr/local/bin)
#define BINDIR "$(prefix)/bin"

//    set data directory (normal /usr/local/share/s25rttr)
#define DATADIR "$(datadir)/s25rttr"


ich möchte aber den Inhalt der Variable da drinstehen haben. Wie kann ich das machen?

Oder sollte ich per sed o.ä das in der Makefile "erzeugen", also die ersetzungen dieser "Variablen"
--
class God : public ChuckNorris { };

Dieser Post wurde am 26.10.2006 um 22:10 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.10.2006, 22:22 Uhr
Pablo
Supertux
(Operator)


Hi


am besten ist es, wenn du in der Makefile.am die AM_CFLAGS um

-DDATADIR=$datadir

erweiterst oder so, denn sonst wirst du dieses Problem haben, sofern der Benutzer configure ohne --datadir=.... ausführt.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.10.2006, 08:34 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das ist natürlich eine Idee. Das sollte dann auch mit speziellen Userangaben à la


C++:
make DATADIR=xyz



klappen. Danke, hilft mir weiter bzw ich probiers nun mal aus


Bearbeitung:

Hmm
So funktioniert zwar das setzen der Pfade, nur nicht per

make DATADIR=xyz

da nimmt er trotz allem immer die "richtigen" bei configure angegebenen.

Wie kann ich das hinkriegen?




Bearbeitung:

Hmm
ich muss datadir und prefix usw kleinschreiben, dann macht ers. Wie müsste ich meine Makefile.am ändern damit er entweder PREFIX oder prefix nimmt?

Im Moment sieht das so aus:


Makefile.am:

prefix = @prefix@
bindir = @bindir@
datadir = @datadir@

AM_CPPFLAGS = -I.. -DPREFIX=\"$(prefix)\" -DBINDIR=\"$(bindir)\" -DDATADIR=\"$(datadir)\"

# ...



was mir noch aufgefallen ist das er mir nun so jedesmal alles neu kompiliert *grml* das ist natürlich irgendwo mist

Achja nochwas:

Wie kann ich z.b diverse Datenordner nach

$(datadir)/mydir

kopieren lassen? irgendwie hab ich das bis jetzt nicht hingekriegt.


--
class God : public ChuckNorris { };

Dieser Post wurde am 27.10.2006 um 09:38 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.10.2006, 11:29 Uhr
Pablo
Supertux
(Operator)


das mit den C/CPPFLAGS überall ist nicht immer toll, aber stört im Wirklichkeit nicht, so dass man es so stehen lassen kann. Wenn du aber es nur bei bestimmten Datein haben willst, dann ist es nicht mehr einfach und du wirst deine eigene all-am Regeln (über)schreiben müssen, und das kann sehr viel Arbeit bedeuten.

Sachen auf $(datadir)/mydir geht so


Makefile.am:

meinedateidir = $(datadir)/mydir
meinedatei_DATA = datei1 datei2 datei3




dann werden 'datei1', 'datei2' und 'datei3' in $(datadir)/mydir kopiert, wenn man make install ausführt. Ebenso werden sie gelöscht beim make uninstall

Die Konvention ist immer:

Code:
Name + das String 'dir' = Verzeichnis, wo es kopiert werden soll
Name + das String '_DATA' = Liste von Dateien



Die Zeilen

Code:
prefix = @prefix@
bindir = @bindir@
datadir = @datadir@



brauchst du nicht in der Makefile.am zu schreiben, die kommen sowieso in der Makefile.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 27.10.2006 um 11:31 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.10.2006, 19:48 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ok das mit den defines hab ich nun mit nem kleinen kniff gelöst:


Layout:

|- Makefile.am (1)
|- src
   |- Makefile.am (2)




Makefile.am (1):

all-local: create_my_damn_files
  $(MAKE) -C src

install-exec-local:
  $(MAKE) -C src install

create_my_damn_files:
  ./parsemyfile.sh $(prefix) $(bindir) $(usw)



Die Zweite Makefile.am dann ganz normal, bin_PROGRAMS = xyz usw

zwar nicht grad schön aber da es keinen "pre-hook" gibt, was solls. hauptsache es funzt

das mit den Extradaten ist gut zu wissen, das muss ich auch noch gar einbauen.

achja nochwas, wie kann ich einen ordner erstellen lassen mit den extradaten? das wüsste ich auch gern
--
class God : public ChuckNorris { };

Dieser Post wurde am 27.10.2006 um 19:49 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.10.2006, 21:29 Uhr
Pablo
Supertux
(Operator)



Zitat:

achja nochwas, wie kann ich einen ordner erstellen lassen mit den extradaten? das wüsste ich auch gern



hab doch gerade gesagt, mit namedir = .... name_DATA kannst du beliebige Ordner erstellen. Um die Erstellung von den Ordern kümmert sich install-sh.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.10.2006, 12:54 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja ich mein - ich hab z.B. nen ordner

$(srcdir)/myordner

und der soll nach

$(DESTDIR)$(sysconfdir)/bla/blubb/myordner
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
29.10.2006, 19:59 Uhr
Pablo
Supertux
(Operator)


Na flo? Du enttäuscht mich



Makefile.am:

# Makefile.am in $(srcdir)
SUBDIRS=myorder




Makefile.am:

# Makefile.am in $(srcdir)/myorder

configdir=$(sysconfdir)/bla/blubb/myordner
config_DATA=file1 file2 file3 file4 ...




Eine andere Lösung (die würde ich aber nicht nehmen) wäre


Makefile.am:

# Makefile.am in $(srcdir)

install: install-am
    mkdir -p $(DESTDIR)/$(sysconfdir)/bla/blubb/myordner
    cp myordner $(DESTDIR)/$(sysconfdir)/bla/blubb/myordner


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: