运行Makefile不完全

问题描述 投票:0回答:1

我是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的菜鸟.如果我没有用好的方法提问,请告诉我,我会变得更好。非常感谢您

c++ makefile
1个回答
1
投票

当你运行 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

有更好的方法来处理构建输出目录的创建,虽然(例子).

© www.soinside.com 2019 - 2024. All rights reserved.