Вы не можете отключить предупреждение, если не пропустите эти флаги. Дело не в том, что вы связываете «слишком много», а в том, что, давая -c, вы не связываете вообще . Любые флаги, которые должны быть переданы компоновщику, будут отображать предупреждение, если вы передадите их команде, которая не запускает компоновщик. Если вы не хотите получать эти предупреждения, не передавайте флаги компоновщика вашему компилятору. Разделите ваши флаги в вашем make-файле на две разные переменные: один набор, который идет и компилятору, и компоновщику (часто люди используют CFLAGS
для этого, но это просто соглашение), и один набор, который идет только компоновщику (часто LDFLAGS
) ).
Кроме того, вы не должны ссылаться в цели all
: иметь отдельную цель для исполняемого файла, чтобы при запуске make дважды без изменений второй вызов ничего не делал.
А в POSIX параметры команды обычно должны предшествовать аргументам, а не потом.
И, конечно, использование шаблонных правил помогает избежать избыточности.
Например:
ifdef vis
ccflg += -Dvis
ldflg += -framework GLUT -framework OpenGL
obj += camfun.o glfuns.o
endif
...
all: $(exe)
$(exe): driver.cpp header.h $(obj)
$(cc) -o $(exe) $(ccflg) $(ldflg) driver.cpp $(obj) $(lib)
%.o: %.cpp header.h
$(cc) -c $(ccflg) $<