2016-03-21 8 views
2

私はMakefileを生成するためにautoconfを使用しています。私はそうしてプロジェクトをコンパイルしていますが、問題はオブジェクトファイルがsrcフォルダ。私はそれらを.libsフォルダにコンパイルします。Makefileは別のディレクトリの.oファイルを検索する必要があります

私は同様にそれを行うことが可能ですが、その後、別の問題が(srcです).cppファイルとして、同じフォルダにこれらのファイル.oのコンパイラ検索を生じます。

私は含めてすべてを試してみました:

%.o: $(SDIR)/%.cpp 
     $(CC) $(CFLAGS) -o $(OBJDIR)/[email protected] -c $< 

$(OBJDIR)/%.o: %.c 
     $(CC) -c -o [email protected] $< $(CFLAGS) 

と私も覚えていないので、他の多くの組み合わせを。 何らかの理由で、これらのルールは.libsフォルダ内のオブジェクトファイルを探して終わるいない、と私が作る実行中にエラーが発生します:

g++: error: One.o: No such file or directory 
g++: error: Two.o: No such file or directory 
g++: error: Three.o: No such file or directory 
g++: error: Four.o: No such file or directory 

は、これはこれまでのところ、私のMakefile.amです:

CFLAGS=-Wall -I/chome/siddhs/soft/soft_source_code/target/src/include/ -I/home/siddhs/EclipseProjects/rdma2/include 
AM_LDFLAGS=-L /usr/pbs/new/exec/lib/ -lsoft -lpthread -llmx-altair -L /usr/lib/x86_64-linux-gnu/ -lcrypto -L . -lsoft 

OUT=rdma2.a 
CC=g++ 
OBJDIR=/home/siddhs/EclipseProjects/rdma2/.libs 
SDIR=/home/siddhs/EclipseProjects/rdma2/src 
INC=-Iinc 
ADIR=/usr/local/rdma2/ 

bin_PROGRAMS=rdma2test 

rdma2test_SOURCES = One.cpp Two.cpp Three.cpp Four.cpp 
rdma2test_LDADD=-L /usr/soft/new/exec/lib -lsoft -lpthread -L /usr/lib/x86_64-linux-gnu/ -lcrypto 

_OBJS = One.o Two.o Three.o Four.o 

%.o: $(SDIR)/%.cpp 
     $(CC) $(CFLAGS) -o $(OBJDIR)/[email protected] -c $< 

$(OBJDIR)/%.o: %.c 
     $(CC) -c -o [email protected] $< $(CFLAGS) 
+0

'Makefile.am'を表示しますが、実際にこれらのオブジェクトファイルから何かを構築するルールを持つmakefileはどこですか? – Beta

答えて

1

最も簡単な方法は、.libsディレクトリ内に2番目のMakefile.amを作成することです。先頭のMakefile.amは、2番目のMakefile.amを指すようにするだけです。 2つめはすべてのビルドプロセスを説明します。

単純な例には、以下が含まれます。

Makefile.am

SUBDIRS = .libs 

.LIBS/Makefile.am

bin_PROGRAMS=rdma2test 
noinst_LIBRARIES= librdma2.a 
AM_LDFLAGS=-L. 
librdma2_a_SOURCES = $(SRC)/One.cpp $(SRC)/Two.cpp 
rdma2test_SOURCES = $(SRC)/Main.cpp 
rdma2test_LDADD= -lrdma2 

configure.ac

AC_INIT([rdma2],[1.0]) 
AC_CONFIG_SRCDIR([src/Main.cpp]) 
AM_INIT_AUTOMAKE 
AC_PROG_CXX(g++) 
AC_PROG_RANLIB 
SRC=`pwd`"/src" 
AC_SUBST(SRC) 
AC_OUTPUT([Makefile .libs/Makefile]) 

注:この構成では、automake以降のバージョンでは警告メッセージが表示されます。

関連する問題