Linux Makefile将.o文件导出到与.cpp不同的路径
因此,我的任务很简单,我已经创建了makefile(使用makefiles新建),我希望将我的.o文件保存在不同的文件夹中,以便有一个更干净的目录,并允许其他人使用.o文件 我搜索并找到了许多指向使用-o$<$@ 但是,它让我明白了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
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 $@