【问题标题】:Running Makefile not completely运行 Makefile 不完全
【发布时间】:2020-05-22 15:25:44
【问题描述】:

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

【问题讨论】:

  • 我猜第一行的iCC 是一个错字。使用 vi?
  • 是的。我用 vim 编辑了 Makefile。

标签: c++ makefile


【解决方案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

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

【讨论】:

猜你喜欢
  • 2021-06-18
  • 1970-01-01
  • 2013-09-23
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 2013-07-18
  • 2011-03-30
相关资源
最近更新 更多