我有以下的makefile,這是我以前使用過的其他makefile的輕微修改。雖然我的變量${CXXOPTS}
未在.c.o
生成文件規則中使用,但有一個奇怪的問題。當我執行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 [email protected]
check-syntax:
${CXX} ${CXXOPTS} ${USEROPTS} -c -o .nul -S ${CHK_SOURCES}
UPDATE:
我改變.c.o
到.cpp.o
。這是一個gnu猜測的例子,當我在我的一個規則中要求一個.o文件時,它應該只是運行g++ -c -o SeqPrep2.o SeqPrep2.cpp
,即使我沒有告訴它這樣做?我想這是我的新問題,爲什麼上面的makefile可以工作,爲什麼它有我觀察到的奇怪行爲。有一點需要注意的是,儘管它在格式化過程中沒有出現,但g++
和-c
之間有很大的空白,有點像試圖放入我的變量,但它沒有。這部分原因讓我相信它看到了我的統治,儘管現在看來並不是這樣。感謝您幫助我瞭解這些東西的工作原理。
你有.co'但你編譯cpp文件規則',是不是這是一個問題,我是那種對那些朦朧規則。 – macduff 2012-03-02 17:54:05