Chcę wiedzieć jak zamiast biegać
gcc -std=c99 foo.c -o foo -lcs50
Mogę po prostu biec
make foo
Problem polega na tym, że kiedy próbuję tego za pomocą tylko polecenia make
, jest napisane
cc foo.c -o foo
Undefined symbols for architecture x86_64:
"_GetString", referenced from:
_main in crypto-6PNyQP.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [crypto] Error 1
Ale kiedy dołączam inne flagi do polecenia gcc
, działa dobrze. Biorę lekcję online i oni są w stanie po prostu wpisać make foo
, a ich wynik będzie
jharvard@appliance (~/Desktop): make foo
gcc -ggdb -std=c99 -Wall -Werror foo.c -lcrypt -lcs50 -lm -o foo
jharvard@appliance (~/Desktop):
Od jakiegoś czasu szukam w Google, próbując znaleźć odpowiedź na to pytanie, ale wciąż nie mam szczęścia.
2 odpowiedzi
Korzystanie z GNU make
:
make CFLAGS=-std=c99 LDLIBS=-lcs50 foo
Lub umieść te makra w 2-wierszowym makefile
:
CFLAGS = -std=c99
LDLIBS = -lcs50
Dla bardziej złożonych opcji pokazanych w ostatnim przykładzie:
CFLAGS = -ggdb -std=c99 -Wall -Werror
LDLIBS = -lcrypt -lcs50 -lm
Z makefile
takim jak ten, możesz zbudować dowolny program xyz
z jednego pliku źródłowego xyz.c
używając tylko:
make xyz
Kiedy musisz tworzyć programy z wielu plików źródłowych, potrzebujesz bardziej złożonego makefile
.
Istnieje forum dyskusyjne (do którego można dołączać za pośrednictwem grup google), które specjalizuje się w odpowiadaniu na pytania dotyczące konfiguracji urządzenia CS50, które, jak zakładam, prowadzisz od czasu korzystania z Harvard's CS50 online.
CS50 in a Box (urządzenie) należy skonfigurować tak, aby po wpisaniu make, podczas kilku pierwszych zadań domowych działo się „właściwa” rzecz, abyś nie musiał od razu martwić się o szczegóły kompilacji.
Jeśli jednak wydaje się, że to nie działa, możesz wysłać pytanie do grupy, o której wspomniałem powyżej, "cs50-discuss". Jeśli (niezalecanie) używasz własnej konfiguracji zamiast modułu, możesz po prostu wyszukać, jak utworzyć „Makefile”, plik tekstowy, który jest odczytywany przez program „make” po jego uruchomieniu. Posiadanie pliku Makefile pozwoli Ci upewnić się, że polecenie, które chcesz uruchomić, zostanie poprawnie wywołane, gdy wywołasz 'make'.
Podobne pytania
Nowe pytania
c
C jest językiem programowania ogólnego przeznaczenia, używanym do programowania systemów (system operacyjny i systemy wbudowane), bibliotek, gier i wielu platform. Ten znacznik powinien być używany w przypadku ogólnych pytań dotyczących języka C, zgodnie z definicją w standardzie ISO 9899 (najnowsza wersja 9899: 2018, chyba że określono inaczej - również oznaczanie żądań dotyczących wersji za pomocą c89, c99, c11 itd.). C różni się od C ++ i nie należy go łączyć ze znacznikiem C ++ bez racjonalnego powodu.