テスト コード ( ) の場所を変更したいのですが、tsnnls_test_DKU.c
このフォルダーの変更を正しく反映するためにメイクファイルを変更することができません。いくつかの助けをいただければ幸いです。
2 つの質問があります 。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
は、次の 3 つの場所 ( 3 つの検索パス) にあります。
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
私のメイクファイルは正常に動作します。
ただし、テスト コードの場所を次のように変更したいと思います。
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 に感謝します。