Portál AbcLinuxu, 4. května 2025 12:33

Dotaz: Úprava jednoduchého Makefile gcc/g++

otula avatar 12.2.2009 09:38 otula | skóre: 45 | blog: otakar | Adamov
Úprava jednoduchého Makefile gcc/g++
Přečteno: 763×
Odpovědět | Admin
Jakožto absolutní neprogramátor bych chtěl poprosit a radu, jak upravit následující makefile, abych mohl kompilaci provést čistě, a ne škaredě :-)
$ cat Makefile
CFLAGS := -W -Wall -O2 -D__UNIX__
CC      := gcc

### Misc
DOCS = CHANGES COPYING README
PACKAGE = vstrip-0.8e
PREFIX = /usr/local
BINDIR = $(PREFIX)/bin
DOCDIR = $(PREFIX)/share/doc


### Sources

SOURCE_FILES=file_io.h file_io.c in_buffer.h in_buffer.c parse_ifo.h parse_ifo.c s_types.h main.c vstrip.h vstrip.c

### Objects and executables

OBJ_FILES = file_io.o in_buffer.o parse_ifo.o main.o vstrip.o

EXEC_FILES = vstrip


### General targets

all: $(EXEC_FILES)


clean:
        rm -f $(EXEC_FILES) $(OBJ_FILES)

install :
        install -o root -g root -m 755 $(EXEC_FILES) $(BINDIR)
        install -o root -g root -m 755 -d $(DOCDIR)/$(PACKAGE)
        install -o root -g root -m 644 $(DOCS) $(DOCDIR)/$(PACKAGE)

uninstall:
        (cd $(BINDIR) && rm -f $(EXEC_FILES))
        (cd $(DOCDIR) && rm -rf $(PACKAGE))


### Details

vstrip :         file_io.o in_buffer.o main.o parse_ifo.o vstrip.o
        $(CC)   -g  file_io.o in_buffer.o main.o parse_ifo.o vstrip.o -o vstrip
file_io.o : s_types.h file_io.h file_io.c
in_buffer.o : s_types.h file_io.h in_buffer.h in_buffer.c
main.o : s_types.h file_io.h vstrip.h main.c
parse_ifo.o : s_types.h file_io.h parse_ifo.h vstrip.h parse_ifo.c
vstrip.o : s_types.h file_io.h in_buffer.h vstrip.h vstrip.c
Pokud spustím příkaz make, skončí to takto:
gcc     -g  file_io.o in_buffer.o main.o parse_ifo.o vstrip.o -o vstrip
vstrip.o: In function `vs_get_time':
vstrip.c:(.text+0x77b): undefined reference to `fmod'
vstrip.c:(.text+0x813): undefined reference to `fmod'
vstrip.c:(.text+0x83e): undefined reference to `fmod'
vstrip.c:(.text+0x94b): undefined reference to `fmod'
vstrip.c:(.text+0x978): undefined reference to `fmod'
vstrip.o:vstrip.c:(.text+0x9af): more undefined references to `fmod' follow
collect2: ld returned 1 exit status
make: *** [vstrip] Error 1
Našel jsem si, že lze tuto chybu vyřešit tím, že se místo gcc použije g++. Pokud po této havárii nahradím počáteční CC:=gcc za CC:=g++, doběhne to do konce a program se zkompiluje. Na počátku to zaměnit nemohu, protože pak by se pro změnu nepřeložily ostatní věci. Chtěl bych to nacpat do PKGBUILDu. Zatím tam mám:
make -i || return 1
patch -p0 < ../patch-vstrip.diff || return 1
make || return 1
což sice funguje, ale uznáte, že je to … ehm, velmi nehezké ;-)

Takže můj dotaz zní, jak upravit Makefile, aby při kompilaci vstrip.c použil g++

Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.2.2009 10:20 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Úprava jednoduchého Makefile gcc/g++
Odpovědět | | Sbalit | Link | Blokovat | Admin

V man fmod se píše Link with -lm - takže bych

$(CC)   -g  file_io.o in_buffer.o main.o parse_ifo.o vstrip.o -o vstrip

nahradil za

$(CC) -g -lm file_io.o in_buffer.o main.o parse_ifo.o vstrip.o -o $@

A pokud to má být jóó hezký, tak to udělat takhle

LDFLAGS=-lm
...
    $(CC) $(CFLAGS) $(LDFLAGS) file_io.o in_buffer.o main.o parse_ifo.o vstrip.o -o $@
I am always ready to learn although I do not always like to be taught. (W. Churchill)
otula avatar 12.2.2009 10:50 otula | skóre: 45 | blog: otakar | Adamov
Rozbalit Rozbalit vše Re: Úprava jednoduchého Makefile gcc/g++
Vojto děkuji, vypadá to funkčně :-)
Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.