Linux Makefile将.o文件导出到与.cpp不同的路径

Linux Makefile将.o文件导出到与.cpp不同的路径,linux,ubuntu,makefile,Linux,Ubuntu,Makefile,因此,我的任务很简单,我已经创建了makefile(使用makefiles新建),我希望将我的.o文件保存在不同的文件夹中,以便有一个更干净的目录,并允许其他人使用.o文件 我搜索并找到了许多指向使用-o$,即 CXX和 CXXFLAGG/,例如用(我从我的代码中提取这个-PU- P /代码>输出)< /P> 试一试 并检查CFLAGS不包括-o-c或-s标志 还可以阅读隐式规则。它可能会帮助您组织makefile为什么只有一个file1.o取决于两个源文件file2.cpp和file1.cpp

因此,我的任务很简单,我已经创建了makefile(使用makefiles新建),我希望将我的.o文件保存在不同的文件夹中,以便有一个更干净的目录,并允许其他人使用.o文件

我搜索并找到了许多指向使用-o$<$@

但是,它让我明白了
g++:不能用-c指定-o,也不能用多个文件指定-S

这就是我想做的:

$(OBJECT_PATH)/file1.o: $(SOURCE_PATH)/file2.cpp $(SOURCE_PATH)/file1.cpp
        $(CC) $(CFLAGS) $(SOURCE_PATH)/file2.cpp $(SOURCE_PATH)/file1.cpp -o $@
file1.cpp包含“file1.h”,因此根据我所读的内容,我应该在依赖项中包含file1.cpp。但是,现在我无法导出到其他目录


有解决办法吗?还是我的概念错了?

使用
make-d
或者更好的
-x
来理解调用的命令

同时运行
make-p
,以了解使用了哪些内置规则

我们无法为您提供更多帮助,因为我们不知道您是否重新定义了
CFLAGS

<>和C++编译最好用<代码> g+++代码>,即<代码> CXX和<代码> CXXFLAGG/<代码>,例如用(我从我的代码中提取这个-PU- P /代码>输出)< /P> 试一试

并检查CFLAGS不包括-o-c或-s标志


还可以阅读隐式规则。它可能会帮助您组织makefile

为什么只有一个
file1.o
取决于两个源文件
file2.cpp
file1.cpp
?这是不寻常的。。。。通常
file1.o
依赖于
file1.cpp
和其他头文件,
file2.o
依赖于
file2.cpp
和其他头文件。。。。整个可执行文件由
file1.o
file2.o
等组成。。已链接到某些库。链接时失败。你知道为什么吗?它正在对函数提供未定义的引用链接步骤中缺少某些对象文件或库,或者链接命令的参数顺序不正确。在你不解释到底是什么失败之前,我帮不了你。哦,我明白了。我不知道这些争论必须是有序的。你能解释一下或者提供一个关于如何下订单的链接吗。谢谢
LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
CXX = g++
%.o: %.cc
      $(COMPILE.cc) $(OUTPUT_OPTION) $<
 CXXFLAGS= -g -Wall
 SOURCES=f1.cc f2.cc
 SOURCE_PATH=yoursourcedir/
 OBJECT_PATH=yourobjectdir/
 SRCFILES=$(patsubst %.cc,$(SOURCE_PATH)/%.cc,$(SOURCES))
 OBJFILES=$(patsubst %.cc,$(OBJECT_PATH)/%.o,$(SOURCES))
 PROGFILE=$(OBJECT_PATH)
 .PHONY: all clean
 all: $(PROGFILE)
 $(PROGFILE): $(OBJFILES)
         $(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@
 $(OBJECT_PATH)/%.o: $(SOURCE_PATH)/%.cc
         $(COMPILE.cc)  $(OUTPUT_OPTION) $<
 clean:
         $(RM) $(OBJECT_PATH)/*.o $(PROGFILE)
$(OBJECT_PATH)/file1.o: $(SOURCE_PATH)/file2.cpp $(SOURCE_PATH)/file1.cpp
    $(CC) $(CFLAGS) $^ -c $@