Makefile变量被忽略

时间:2012-03-02 17:48:00

标签: makefile

我有以下makefile,这是我过去使用过的其他一些修改文件。虽然我的变量${CXXOPTS}没有在.c.o makefile规则中使用,但是有一个奇怪的问题。当我执行makefile时,这是我希望执行它时执行的g++ -c -o SeqPrep2.o SeqPrep2.cppg++ -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之间仍有很多空白区域,就像它试图放入我的格式一样变量,但它没有。这部分原本让我相信它完全看到了我的统治,即使它现在似乎没有。感谢您帮助我了解这些内容是如何运作的。

1 个答案:

答案 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
相关问题