저는 이전에 사용했던 다른 메이크 파일을 약간 수정했습니다. 내 변수 ${CXXOPTS}
이 .c.o
메이크 파일 규칙에 사용되지 않지만 이상한 문제가 있습니다. 내가 makefile을 실행할 때 이것은 실행될 것으로 예상 될 때 g++ -c -o SeqPrep2.o SeqPrep2.cpp
이 실행되는 것이다 : g++ -Iseqan-03-02-2012 -c -o SeqPrep2.o SeqPrep2.cpp
. Makefile 변수가 무시됩니다.
.cpp.o
에
.c.o
변경 :
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 [email protected]
check-syntax:
${CXX} ${CXXOPTS} ${USEROPTS} -c -o .nul -S ${CHK_SOURCES}
UPDATE : (편집 나는 문제를 해결하지만,이 메이크가 처음부터 모든 일을하는 이유에 대해 아래 내 업데이트 된 질문을 참조). gnu의 경우에 내가 내 규칙 중 하나에서 .o 파일을 물었을 때 g++ -c -o SeqPrep2.o SeqPrep2.cpp
을 실행하여 그냥 만들어야한다고 추측합니다. 나는 그것이 나의 새로운 질문이라고 생각한다. 왜 위의 메이크 파일은 전혀 작동하지 않았고, 왜 나는 그것이 이상한 행동을 보였는가? 한 가지주의해야 할 점은 비록 포맷팅에서 오지는 않았지만, g++
과 -c
사이에 많은 공백이 있고, 내 변수를 넣으려고하는 것과 비슷하지만 그렇지 않다는 것입니다. 그게 부분적으로 원래는 내가 그것이 내 규칙을 전혀 보지 못했다고 믿게 만들었다. 이 자료가 어떻게 작동하는지 이해하도록 도와 주셔서 감사합니다.
당신은 그러나 당신이 CPP 파일을 컴파일하고 .co' 규칙을'있어,이 문제가되지 않습니다, 나는 어떤 사람에의 흐릿한 해요 규칙. – macduff