未完全运行生成文件

Running Makefile not completely

本文关键字:文件 运行      更新时间:2023-10-16

我是MaKefile的菜鸟,最近一直在学习它。 但是,当我尝试在终端上运行make命令时遇到了麻烦。 这是我的制作文件:

CC = g++
CFLAGS = -g -Wall
bin = ./bin/
makedir:
@echo "build ./bin"
mkdir  $(bin)
all: algo
OBJS = $(patsubst %.o, $(bin)%.o, BB.o BF.o method.o algo.o)
algo: BB.o BF.o method.o algo.o
$(CC) -o algo $(OBJS)
BB.o: BB.cpp 
$(CC) $(CFLAGS) -c $^ -o $(bin)$@
BF.o: BF.cpp 
$(CC) $(CFLAGS) -c $^ -o $(bin)$@
method.o: method.cpp
$(CC) $(CFLAGS) -c method.cpp -o $(bin)$@
algo.o: algo.cpp method.hpp
$(CC) $(CFLAGS) -c algo.cpp -o $(bin)$@
clean:
-rm -f $(bin)*
-rmdir $(bin)
-rm -f algo

我试图将目标文件放在bin目录中。 但是,终端仅显示:

build ./bin
mkdir bin

这就是问题所在。仅创建名为bin的空目录。 似乎在mkdir命令之后它什么也没做。

有关更多详细信息,它是我在运行命令之前的目录结构make

├── algo.cpp
├── BB.cpp
├── BF.cpp
├── Makefile
├── method.cpp
├── method.hpp

我对此一无所知,并试图找到任何解决方法,但毫无用处。 顺便说一句,我也是Stackoverflow的菜鸟。 如果我不以好的方式提问,请告诉我,我会变得更好。非常感谢!

当您在没有参数的情况下运行make时,将遵循 Makefile 中第一个目标的配方。

您的第一个目标是makedir,其配方执行这两个命令,而不是其他任何命令。所以,计算机正在做你要求它做的事情。

我建议你把all目标放在第一位,makedir作为实际依赖它的目标的先决条件:

CC = g++
CFLAGS = -g -Wall
bin = ./bin/
all: algo
OBJS = $(patsubst %.o, $(bin)%.o, BB.o BF.o method.o algo.o)
algo: BB.o BF.o method.o algo.o
$(CC) -o algo $(OBJS)
BB.o: makedir BB.cpp 
$(CC) $(CFLAGS) -c $^ -o $(bin)$@
BF.o: makedir BF.cpp 
$(CC) $(CFLAGS) -c $^ -o $(bin)$@
method.o: makedir method.cpp
$(CC) $(CFLAGS) -c method.cpp -o $(bin)$@
algo.o: makedir algo.cpp method.hpp
$(CC) $(CFLAGS) -c algo.cpp -o $(bin)$@
makedir:
@echo "build ./bin"
mkdir  $(bin)
clean:
-rm -f $(bin)*
-rmdir $(bin)
-rm -f algo

不过,有更好的方法来处理构建输出目录的创建(示例(。