带有makefile的嵌套输出文件夹

时间:2016-03-04 10:59:34

标签: makefile

我正在尝试创建一个嵌套的输出文件夹结构来构建一个开源库。但是,我之前从未使用过makefile,并且有一些基本的问题。

阅读完一些文档后,我设法创建了嵌套文件夹和所有正确编译的目标文件。但是仍然有一些我无法弄清楚的错误。

一个简单的makefile示例(从原始makefile修改):

SRC     = ../src/lib
OUT     = rtklib_post_proc
LIB     = $(OUT)/lib

OPTS    = -DTRACE -DENAGLO -DENAQZS -DENAGAL -DNFREQ=3

# For using lapack and blas
CFLAGS  = -Wall -O3 -ansi -pedantic -Wno-unused-but-set-variable -I$(SRC) -DLAPACK $(OPTS)
LDLIBS  = -lm -lrt -llapack -lblas

all        : rnx2rtkp
rnx2rtkp   : rnx2rtkp.o postpos.o

rnx2rtkp.o : ../src/rnx2rtkp.c
    mkdir -p $(OUT)
    $(CC) -c $(CFLAGS) ../src/rnx2rtkp.c -o $(OUT)/$@
postpos.o  : $(SRC)/postpos.c
    mkdir -p $(LIB)
    $(CC) -c $(CFLAGS) $(SRC)/postpos.c -o $(LIB)/$@

$(LIB)/rnx2rtkp.o : $(SRC)/rtklib.h
$(LIB)/postpos.o  : $(SRC)/rtklib.h

输出错误:

mkdir -p rtklib_post_proc
cc -c -Wall -O3 -ansi -pedantic -Wno-unused-but-set-variable -I../src/lib -DLAPACK -DTRACE -DENAGLO -DENAQZS -DENAGAL -DNFREQ=3 ../src/rnx2rtkp.c -o rtklib_post_proc/rnx2rtkp.o
mkdir -p rtklib_post_proc/lib
cc -c -Wall -O3 -ansi -pedantic -Wno-unused-but-set-variable -I../src/lib -DLAPACK -DTRACE -DENAGLO -DENAQZS -DENAGAL -DNFREQ=3 ../src/lib/postpos.c -o rtklib_post_proc/lib/postpos.o
cc   rnx2rtkp.o postpos.o -lm -lrt -llapack -lblas -o rnx2rtkp
cc: error: rnx2rtkp.o: No such file or directory
cc: error: postpos.o: No such file or directory
make: *** [rnx2rtkp] Error 1

任何解决这个问题的指导都会非常棒。

稍加更新更新

rnx2rtkp   : $(OUT)/rnx2rtkp.o $(LIB)/postpos.o

结果:

mkdir -p rtklib_post_proc
cc -c -Wall -O3 -ansi -pedantic -Wno-unused-but-set-variable -I../src/lib -DLAPACK -DTRACE -DENAGLO -DENAQZS -DENAGAL -DNFREQ=3 ../src/rnx2rtkp.c -o rtklib_post_proc/rnx2rtkp.o
cc   rnx2rtkp.o rtklib_post_proc/rnx2rtkp.o rtklib_post_proc/lib/postpos.o -lm -lrt -llapack -lblas -o rnx2rtkp
cc: error: rnx2rtkp.o: No such file or directory
cc: error: rtklib_post_proc/lib/postpos.o: No such file or directory
make: *** [rnx2rtkp] Error 1

更新2:

all        : $(OUT)/rnx2rtkp

结果:

make: *** No rule to make target `rtklib_post_proc/rnx2rtkp', needed by `all'.  Stop.

1 个答案:

答案 0 :(得分:0)

rnx2rtkp.o : ../src/rnx2rtkp.c

此行表示与makefile 在同一目录中的rnx2rtkp.o 取决于源文件。那不是正确的位置!

此外,在同一行添加文件的所有依赖项:

尝试:

$(OUT)/rnx2rtkp.o : ../src/rnx2rtkp.c $(SRC)/rtklib.h

并删除下面的依赖项$(LIB)/rnx2rtkp.o : $(SRC)/rtklib.h

您还需要更新中间依赖项:

rnx2rtkp   : $(OUT)/rnx2rtkp.o $(LIB)/postpos.o

然后对postpos执行相同的操作。请务必使用$LIB$OUT