Нет правила, чтобы сделать цель ... libm.a - PullRequest
1 голос
/ 09 ноября 2009

Я получаю следующую ошибку при попытке скомпилировать приложение:

*** No rule to make target `/mypath/lib/libm.a', needed by `/myPath/bin/appName'

Почему компоновщик ищет libm.a по абсолютному пути?

1 Ответ

5 голосов
/ 09 ноября 2009

Я начинаю думать о переплетении программирования с экстрасенсорной карьерой ...

Почему компоновщик ищет libm.a по абсолютному пути?

Потому что ты сказал ему это сделать. Скорее всего, вы набрали

# There were some rules that build your own .a libs
myLib.a: ...
   ...

# Handy rule to direct your libs into lib/ folder!
vpath %.a /mypath/lib

appName: appName.o libm.a
   g++ $^ -o $@

Упс! Вам нужна «система» libm.a (это математическая библиотека, часть glibc), но make считает, что вам нужна ваша собственная статическая библиотека. Затем он добавляет правильный префикс и не находит никаких правил для переделки libm.a.

Решение может переместить libm.a из предварительных условий. Это цель скрипта настройки или специальной цели make sanity для проверки существования системных библиотек.

EXT_LIBS=libm.a

appName: appName.o
   g++ $^ $(EXT_LIBS) -o $@
...