C++ Makefile应该在另一个目录中搜索.o文件

C++ Makefile应该在另一个目录中搜索.o文件,c++,compilation,makefile,linker,autoconf,C++,Compilation,Makefile,Linker,Autoconf,因此,我使用autoconf生成一个Makefile,我已经成功地这样做并编译了我的项目,但问题是对象文件是在src文件夹中创建的。我希望将它们编译到.libs文件夹中 我也可以这样做,但是另一个问题出现了,编译器在与.cpp文件(即src)相同的文件夹中搜索这些.o文件 我尝试了一切,包括: %.o: $(SDIR)/%.cpp $(CC) $(CFLAGS) -o $(OBJDIR)/$@ -c $< 这是我的Makefile.am,到目前为止: CFLAGS=-Wa

因此,我使用autoconf生成一个Makefile,我已经成功地这样做并编译了我的项目,但问题是对象文件是在
src
文件夹中创建的。我希望将它们编译到
.libs
文件夹中

我也可以这样做,但是另一个问题出现了,编译器在与
.cpp
文件(即
src
)相同的文件夹中搜索这些
.o
文件

我尝试了一切,包括:

%.o: $(SDIR)/%.cpp
        $(CC) $(CFLAGS) -o $(OBJDIR)/$@ -c $<
这是我的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)/$@ -c $<

$(OBJDIR)/%.o: %.c
        $(CC) -c -o $@ $< $(CFLAGS)
CFLAGS=-Wall-I/chome/siddhs/soft/soft\u source\u 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-软软件
OUT=rdma2.a
CC=g++
OBJDIR=/home/siddhs/EclipseProjects/rdma2/.libs
SDIR=/home/siddhs/EclipseProjects/rdma2/src
INC=-Iinc
ADIR=/usr/local/rdma2/
bin_程序=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=1.o2.o3.o4.o
%.o:$(SDIR)/%.cpp
$(CC)$(CFLAGS)-o$(OBJDIR)/$@-c$<
$(OBJDIR)/%.o:%.c
$(CC)-c-o$@$<$(CFLAGS)

最简单的方法是在
.libs
目录中创建第二个
Makefile.am
。顶部的
Makefile.am
只需指向第二个
Makefile.am
。第二部分将描述所有构建过程

一个简单的示例将包含以下内容

Makefile.am

SUBDIRS = .libs
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 
.libs/Makefile.am

SUBDIRS = .libs
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 
配置.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
会发出警告消息。

您向我们显示了
Makefile.am
,但是使用它的Makefile在哪里,即具有从这些对象文件实际构建内容规则的Makefile?