我是MaKefile的菜鸟,最近一直在学习它,但是,当我尝试运行 make
这是我的Makefile。
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
有更好的方法来处理构建输出目录的创建,虽然(例子).