我有以下makefile,这是我过去使用过的其他一些修改文件。虽然我的变量${CXXOPTS}
没有在.c.o
makefile规则中使用,但是有一个奇怪的问题。当我执行makefile时,这是我希望执行它时执行的g++ -c -o SeqPrep2.o SeqPrep2.cpp
:g++ -Iseqan-03-02-2012 -c -o SeqPrep2.o SeqPrep2.cpp
。 (编辑:我解决了这个问题但是在下面看到我的更新问题,关于为什么这个makefile一开始就工作了)
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
来实现吗?我想这是我的新问题,为什么上面的makefile工作,为什么它有我观察到的奇怪行为。有一点需要注意的是,即使在格式化中没有出现这种情况,g++
和-c
之间仍有很多空白区域,就像它试图放入我的格式一样变量,但它没有。这部分原本让我相信它完全看到了我的统治,即使它现在似乎没有。感谢您帮助我了解这些内容是如何运作的。
答案 0 :(得分:1)
您已经获得了规则.c.o
但是您正在编译cpp文件,当我使用.cpp.o:
时它很有效!使用文件:me.cpp us.cpp you.cpp
我明白了:
Building file me.cpp
g++ -Iseqan-03-02-2012 -c me.cpp -o me.o
Building file us.cpp
g++ -Iseqan-03-02-2012 -c us.cpp -o us.o
Building file you.cpp
g++ -Iseqan-03-02-2012 -c you.cpp -o you.o
g++ -o SeqPrep2 me.o us.o you.o -lm -lz