Jestem nowy w systemie operacyjnym Linux. Próbuję skompilować plik .c
przy użyciu pliku makefile. Biblioteka matematyczna musi być połączona. Moje makefile wygląda następująco:Jak używać LDFLAGS w makefile
CC=gcc
CFLAGS=-Wall -lm
all:client
.PHONY: clean
clean:
rm *~ *.o client
Kiedy biegnę make
, pojawia się następujący błąd:
"undefined reference to rint"
więc nie jest w stanie połączyć bibliotekę matematyczną.
Ale kiedy mogę skompilować jawnie przy użyciu
gcc client.c -lm -o client
powodzeniem kompiluje.
Jak zatem zmienić plik Makefile tak, aby działał? Próbowałem już dodać: LDFLAGS=-lm
. Ale pojawia się ten sam błąd.
Należy również dodać, że gdy uruchamiam make
, rozszerza się
gcc -Wall -lm client.c -o client
(Zauważ, że gdy uruchamiam gcc
wyraźnie ze -lm
na końcu, to działa).
LDLIBS jest dla bibliotek, LDFLAGS należy stosować Flagi/ścieżek wyszukiwania (-L) – falstaff
[nie trzeba jawnie zdefiniować 'CC'.] (Http://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html) – 0xcaff
Myślałem również, że -lm powinien być w LDFLAGS, ale jak się okazuje (patrz odpowiedź laindira i https://www.gnu.org/software/make/manual/html_node/Catalogue-of-Rules.html), zamiast tego powinien znajdować się w LOADLIBES, a następnie wszystko działa po wyjęciu z pudełka (tj. bez definiowania jawnych reguł) ! –