Проблема здесь в порядке связывания с математической библиотекой (опция -lm
). При сборке библиотеки должны располагаться после исходных или объектных файлов в командной строке.
Итак, если вы запустили команду для сборки вручную, она должна выглядеть так:
gcc p1.c -o p1 -lm
Проблема в том, что ваш make-файл на самом деле ничего не делает и живет только на неявных правилах. Неявные правила используют определенные переменные в определенном порядке, что не позволяет разместить библиотеку в нужном месте в вашем make-файле.
Попробуйте вместо этого что-нибудь вроде этого make-файла:
# The C compiler to use.
CC = gcc
# The C compiler flags to use.
# The -g flag is for adding debug information.
# The -Wall flag is to enable more warnings from the compiler
CFLAGS = -g -Wall
# The linker flags to use, none is okay.
LDFLAGS =
# The libraries to link with.
LDLIBS = -lm
# Define the name of the executable you want to build.
EXEC = p1
# List the object files needed to create the executable above.
OBJECTS = p1.o
# Since this is the first rule, it's also the default rule to make
# when no target is specified. It depends only on the executable
# being built.
all: $(EXEC)
# This rule tells make that the executable being built depends on
# certain object files. This will link using $(LDFLAGS) and $(LDLIBS).
$(EXEC): $(OBJECTS)
# No rule needed for the object files. The implicit rules used
# make together with the variable defined above will make sure
# they are built with the expected flags.
# Target to clean up. Removes the executable and object files.
# This target is not really necessary but is common, and can be
# useful if special handling is needed or there are many targets
# to clean up.
clean:
-rm -f *.o $(EXEC)
Если вы запустите make
с использованием вышеуказанного make-файла, программа make
должна сначала построить объектный файл p1.o
из исходного файла p1.c
. Затем следует использовать объектный файл p1.o
для связывания исполняемого файла p1
со стандартной математической библиотекой.
person
Some programmer dude
schedule
21.09.2016
p1
из каких объектных файлов? И, пожалуйста, опубликуйте результат выполнения командыmake
(послеmake clean
). - person Some programmer dude   schedule 21.09.2016all
зависят от $ (EXECS) `(т.е.p1
). Но от чего$(EXECS)
зависит? - person Some programmer dude   schedule 21.09.2016