У меня есть этот make-файл:
SHELL=/bin/zsh
COMPILER=g++ -g
COMPILERSO=g++ -a +a1 -b
LIBDIR=/Users/romeovs/Desktop/rootex
CFLAGS=$(root-config --cflags)
LIBS=$(root-config --libs) -lPhysics -lThread -lMinuit -lHtml -lVMC -lEG -lGeom
ROOT=/usr/local/bin/root -b -q
.SUFFIXES=.C .o
WriteTree : WriteTree.C Event.o Event_C.so Event.h
${COMPILER} WriteTree.C -o $@ Event.o Event_C.so ${CFLAGS} ${LIBS}
Event_C.so : BuildLibDico.C
${ROOT} BuildLibDico.C
Event.o : Event.C Event.h
${COMPILER} -c ${CFLAGS} Event.C
Когда я запускаю в make Event.o
int командную строку, можно ожидать, что make
запустится:
${COMPILER} -c ${CFLAGS} -o Event.o Event.C
, который должен расширитьсядо
g++ -g -c $(root-config --cflags) -o Event.o Event.C
, который, в свою очередь, должен быть расширен до $(root-config --cflags)
.
Тем не менее, когда я делаю это, make
приветствует:
g++ -c -o Event.o Event.C
(обратите внимание на дополнительный пробел между g++
и -c
).Это, в свою очередь, приводит к ошибкам компиляции.
Кажется, что расширение не работает должным образом.Запуск:
g++ -c $(root-config --cflags) -o Event.o Event.C
работает, хотя.
Что я могу сделать, чтобы это исправить?
РЕДАКТИРОВАТЬ
Одна часть проблемы была решена с помощью ответа Жиля.
Другая часть проблемы заключалась в том, что make
на самом деле не смотрел в каталог make-файл (он называется WriteTree.make
) и работалосновная команда g++
.
Это можно исправить с помощью make -f WriteTree.make Event.o
, но я не знаю, хорошее ли это поведение make
(мне бы очень хотелось, чтобы он искал для себя make-файлы, не только makefile
, но и каждый *.make
).