我想要更改我的测试代码(tsnnls_test_DKU.c
)的位置,但是我无法在makefile中进行更改以正确反映此文件夹的更改。希望能得到一些帮助。
我有两个问题: 1)如何链接来自不同子目录的对象文件 2)包括不同的搜索路径(在我的示例中有3个搜索路径)。
在我的原始设置中,makefile正常工作,我将我的测试代码tsnnls_test_DKU.c
放在以下位置(第三方库内):
Dir1 = /home/dkumar/libtsnnls-2.3.3/tsnnls
我链接到的所有目标文件都在此处
OBJDir = /home/dkumar/libtsnnls-2.3.3/tsnnls
此外,tsnnls_test_DKU.c
中包含的一些包含文件位于以下三个搜索路径中:
Dir1 = /home/dkumar/libtsnnls-2.3.3/tsnnls
Dir2 = /home/dkumar/libtsnnls-2.3.3
Dir3 = /home/dkumar/libtsnnls-2.3.3/tsnnls/taucs_basic
我的makefile工作正常。
然而,我想将测试代码的位置更改为:
Dir4 = /home/dkumar/CPP_ExampleCodes_DKU/Using_tsnnls_DKU/
以下是我的makefile的样子(在另一个用户的输入后进行了更新):
# A sample Makefile
VPATH = -L/home/dkumar/libtsnnls-2.3.3/tsnnls
INC_PATH = -I/home/dkumar/libtsnnls-2.3.3/ -I/home/dkumar/libtsnnls-2.3.3/tsnnls/ -I/home/dkumar/libtsnnls-2.3.3/tsnnls/taucs_basic/
# Here is a simple Make Macro.
LINK_TARGET = tsnnls_test_DKU
OBJS_LOC = tsnnls_test_DKU.o
# Here is a Make Macro that uses the backslash to extend to multiple lines.
OBJS = libtsnnls_la-taucs_malloc.o libtsnnls_la-taucs_ccs_order.o \
libtsnnls_la-taucs_ccs_ops.o libtsnnls_la-taucs_vec_base.o \
libtsnnls_la-taucs_complex.o libtsnnls_la-colamd.o \
libtsnnls_la-amdbar.o libtsnnls_la-amdexa.o \
libtsnnls_la-amdtru.o libtsnnls_la-genmmd.o \
libtsnnls_la-taucs_timer.o libtsnnls_la-taucs_sn_llt.o \
libtsnnls_la-taucs_ccs_base.o libtsnnls_la-tlsqr.o \
libtsnnls_la-tsnnls.o libtsnnls_la-lsqr.o \
$(OBJS_LOC)
REBUILDABLES = $(LINK_TARGET)
all : $(LINK_TARGET)
echo All done
clean :
rm -f $(REBUILDABLES)
echo Clean done
#Inclusion of all libraries
RANLIB = ranlib
STATICLIB= /usr/local/lib/taucs_full/lib/linux/libtaucs.a
tsnnls_test_LDADD = $(LDADD)
LIBS = -largtable2 -llapack -lblas -lquadmath -lm
$(LINK_TARGET) : $(OBJS) $(tsnnls_test_LDADD) $(LIBS) $(STATICLIB)
gcc -g ${INC_PATH} -o $@ $^
尝试运行"$make"时出现的错误。
make: *** No rule to make target `libtsnnls_la-taucs_malloc.o', needed by `tsnnls_test_DKU'. Stop.
显然,我无法正确使用VPATH。
更新: 感谢Mike Kinghan回答我的问题。
VPATH
文档。 - mfro