gpt4 book ai didi

c++ - 创建将 .o 存储到目录的 makefile c++

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:48 26 4
gpt4 key购买 nike

这是我的数据存储方式的示例:

\Program
main.cpp
makefile
\Part1
file1.cpp
file1.h
file2.cpp
etc
\Part2
file3.cpp
file4.cpp
file4.h
etc..
\Part3
file5.cpp
file5.h
etc..

\Objects
file1.o
file2.o
file3.o
file4.o

我想你明白了。

我的问题是,无论我如何尝试,我的 makefile 都不起作用

clang: error: no input files

Undefined symbols for architecture x86_64:

好吧,我试着自己学习如何构建一个 makefile。我学习了最简单的方法,例如:

all:exe
exe: Objects/file1.o Objects/file2.o Objects/file3.o Objects/file4.o Objects/file5.o .....
$(CPP) $(LFLAGS) Objects/file1.o Objects/file2.o Objects/file3.o ... -o exe

然后,对于每个 .o,我要求 makefile 执行以下操作:

Objects/file1.0: Part1/file1.cpp
$(CPP) $(CFLAGS) -o $(OBJ/file1).o Part1/file1.o

但我一直有这个问题:

makefile:XX: warning: overriding commands for target .o'
makefile:XX: warning: ignoring old commands for target
.o'

对于每个文件

我试图学习如何更正确地构建 makefile,但这非常困难。我尝试了很多很多东西,但都没有用。

这就是我所说的编写makefile的正确方法的意思

ALL_CPP=Part1/*.cpp, Part2/*.cpp, Part3/*.cpp, Part4/*.cpp
CPP_FILES := $(wildcard $(ALL_CPP))
OBJ_FILES = $(patsubst $(ALL_CPP),Objects/%.o,$(CPP_FILES))

main: $(OBJ_FILES)
g++ -o $@ $^

Objects/%.o: Animal/%.cpp
g++ $(CFLAGS) -c -o $@ $<
Objects/%.o: Enclos/%.cpp
g++ $(CFLAGS) -c -o $@ $<
Objects/%.o: Menu/%.cpp
g++ $(CFLAGS) -c -o $@ $<
Objects/%.o: Zoo/%.cpp
g++ $(CFLAGS) -c -o $@ $<

当然不行。

我的问题是:

如何创建一个可以在像我这样的环境(具有不同的子文件夹)中工作并将 .o 存储在专用文件夹中的 makefile。

我曾使用 xcode,但不幸的是我想要一个菜单​​,您可以在其中使用在 xcode 控制台上不起作用的箭头进行导航。

最佳答案

您的第二次尝试非常接近。

问题出在这一行

OBJ_FILES = $(patsubst $(ALL_CPP),Objects/%.o,$(CPP_FILES))

$(patsubst) 的第一个参数是要匹配的模式,但 $(ALL_CPP) 不是模式。您希望那里的每个目录都有 dir/%.c。如果您真的愿意,您可以列出该模式,但有更好的方法。

这里确实有两个 转换。一个用 Objects 替换 any 前导目录,一个用 .o 替换 .cpp

所以分开做。

使用 Substitution Reference对于第一部分:

OBJ_FILES := $(CPP_FILES:.cpp=.o)

notdiraddprefix file name functions对于第二部分:

OBJ_FILES := $(addprefix Objects/,$(notdir $(OBJ_FILES))

这应该能让事情顺利进行。

关于c++ - 创建将 .o 存储到目录的 makefile c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36702914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com