我正在尝试创建一个嵌套的输出文件夹结构来构建一个开源库。但是,我之前从未使用过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.
答案 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
。