(Это явно итеративный процесс, и комментарии становятся длиннее, поэтому я бы лучше начал ответ.)
Вы говорите: «Когда я добавляю echo SIM_JOBS: $ (SIM_OBJS) в правило, при запуске make clean я получаю следующее: rm -f ../bin/qualnet ../bin/radio_range"
Это не имеет смысла. Вы должны получить что-то вроде
SIM_JOBS: ../bin/qualnet ../bin/radio_range
rm -f ../bin/qualnet ../bin/radio_range
или
SIM_JOBS: something/else
rm -f ../bin/qualnet ../bin/radio_range
или хотя бы
SIM_JOBS:
rm -f ../bin/qualnet ../bin/radio_range
Это говорит о том, что вы смотрите на неправильное правило: правило, которое выдает rm -f ../bin/qualnet ../bin/radio_range
, является , а не правилом, в которое вы положили команду echo ...
. Если это является правилом и вы просто неточны в отчете, поместите это прямо над clean
правилом:
SIM_JOBS=../bin/qualnet ../bin/radio_range
и расскажите нам, что происходит.
EDIT:
- Извините, я написал `SIM_JOBS`, когда имел в виду` SIM_OBJS`.
- Команда `echo` была вне правила, где она не может работать.
- Похоже, проблема. Не могли бы вы отредактировать свой вопрос, чтобы показать строку, которую вы упомянули в @thiton, и несколько предыдущих строк? Похоже, что флаг "-lpcap" попадает в переменную, где он не принадлежит.
EDIT:
«-Lpcap» - это кладжа. Я предполагаю, что это опция, предназначенная для компоновщика. Предположим, вы хотите связать несколько объектных файлов в исполняемый файл и выполнить поиск в определенной библиотеке с именем «pcap»:
gcc foo.o -lpcap bar.o baz.o
Порядок очень важен; когда компоновщик что-то ищет, вы хотите, чтобы он сначала искал foo.o, затем pcap, затем bar, затем baz. Это вопрос приоритета. Но вы хотите сохранить эти имена файлов в красивой аккуратной переменной, и как вы вставите lpcap
в нужное место? Вы могли бы сделать это хорошим способом или использовать ленивый хак, как это:
OBJECTS = foo.o -lpcap bar.o baz.o
gcc $(OBJECTS)
И если вы выводите ОБЪЕКТЫ из ИСТОЧНИКОВ, вы должны поставить хак раньше:
SOURCES = foo.cc -lpcap bar.cc baz.cc
OBJECTS = $(SOURCES:.cc=.o)
Кто бы ни писал эти make-файлы, он сэкономил полчаса с этим клуджем, и на его исправление у вас ушли дни. Если вы можете подтвердить, что это именно то, что происходит, проще всего, вероятно, разделить список на две части:
SOURCES_LEFT = foo.cc
SOURCES_RIGHT = bar.cc baz.cc
OBJECTS_LEFT = $(SOURCES_LEFT:.cc=.o)
OBJECTS_RIGHT = $(SOURCES_RIGHT:.cc=.o)
gcc $(OBJECTS_LEFT) -lcap $(OBJECTS_RIGHT)