У меня есть следующий make-файл, который является небольшой модификацией для других, которые я использовал в прошлом.Есть странная проблема, хотя моя переменная ${CXXOPTS}
не используется в правиле make-файла .c.o
.Когда я выполняю make-файл, это то, что выполняется g++ -c -o SeqPrep2.o SeqPrep2.cpp
, когда я ожидаю, что это будет выполнено: g++ -Iseqan-03-02-2012 -c -o SeqPrep2.o SeqPrep2.cpp
.(Изменить: я решил проблему, но см. Мой обновленный вопрос ниже о том, почему этот make-файл вообще работал вообще)
L=-lm -lz
SEQANINC=seqan-03-02-2012
DESTDIR=$(HOME)/
BINDIR=bin
CXXOPTS=-I${SEQANINC}
CXX=g++
A=SeqPrep2
USEROPTS=
O=$(patsubst %.cpp,%.o,$(wildcard *.cpp))
SOURCES=$(wildcard *.cpp)
all: ${A} ${O} ${SOURCES}
install: ${O} ${MYLIBS} ${SOURCES}
${CXX} ${USEROPTS} -o ${DESTDIR}${BINDIR}/${A} ${O} ${L}
${A}: ${O} ${MYLIBS} ${SOURCES}
${CXX} ${USEROPTS} -o ${A} ${O} ${L}
clean::
rm -f ${A} ${O}
.c.o:
${CXX} ${CXXOPTS} ${USEROPTS} -c $< -o $@
check-syntax:
${CXX} ${CXXOPTS} ${USEROPTS} -c -o .nul -S ${CHK_SOURCES}
ОБНОВЛЕНИЕ:
Я изменил .c.o
на .cpp.o
.Это тот случай, когда GNU догадывается, что, когда я попросил файл .o в одном из моих правил, он должен сделать это, просто запустив g++ -c -o SeqPrep2.o SeqPrep2.cpp
, даже если я не сказал ему сделать это?Я предполагаю, что это мой новый вопрос, почему вышеупомянутый make-файл работал вообще, и почему он имел странное поведение, которое я наблюдал.Стоит отметить, что, хотя это не произошло в форматировании, между g++
и -c
есть много пробелов, вроде как он пытался вставить мои переменные, но этоне сделал.Это отчасти то, что изначально заставило меня поверить, что оно вообще видело мое правило, даже если кажется, что оно не видело сейчас.Спасибо, что помогли мне понять, как это работает.