我一直在尝试复制我在网上找到的一个 makefile。我目前遇到以下错误:
MyComputer:folderName userName$ make
make: bin/kernel: No such file or directory
make: *** [bin/kernel] Error 1
makefile源码如下:
### Typing 'make' will create the executable file.
CC = gcc
CFLAGS = -g -Wall
LDFLAGS =
LIBS = -lstdc++
TARGET = kernel
SRCDIR = src
OBJDIR = obj
BINDIR = bin
#TARGETDIR = $(BINDIR)/$(TARGET)
SOURCES := $(wildcard $(SRCDIR)/*.cc)
INCLUDES := $(wildcard $(SRCDIR)/*.h)
OBJECTS := $(SOURCES:$(SRCDIR)/%.cc=$(OBJDIR)/%.o)
rm = rm -f
$(BINDIR)/$(TARGET): $(OBJECTS)
@$(LINKER) $@ $(LFLAGS) $(OBJECTS) $(LIBS)
@echo "Linking complete!"
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cc
@$(CC) $(CFLAGS) -c $< -o $@
@echo "Compiled "$<" successfully!"
#$(CC) $(CFLAGS) $(LFLAGS) -o $(MAIN) $(OBJS) $(LIBS) $@
#make clean removed from this code, unnecessary
我尝试过的事情:
- 将
$(BINDER)/$(TARGET):
更改为$(BINDER)
(make: bin: No such file or directory
) - 更改文件夹权限并以 sudo 身份运行(无效)
- 制作 bin/kernel 文件夹(使用 sudo 和 chmod 777 权限被拒绝)
- 向我们的黑暗领主克苏鲁祈祷(可能是不可避免的厄运)
最佳答案
您的 Makefile 假定项目目录的结构如下:
.
├── bin
├── Makefile
├── obj
└── src
└── main.cc
我修改了链接阶段,因为您没有定义 $(LINKER)
:
CC = gcc
CFLAGS = -g -Wall
LDFLAGS =
LIBS = -lstdc++
TARGET = kernel
SRCDIR = src
OBJDIR = obj
BINDIR = bin
SOURCES := $(wildcard $(SRCDIR)/*.cc)
INCLUDES := $(wildcard $(SRCDIR)/*.h)
OBJECTS := $(SOURCES:$(SRCDIR)/%.cc=$(OBJDIR)/%.o)
rm = rm -f
$(BINDIR)/$(TARGET): $(OBJECTS)
@$(CC) -o $@ $(LFLAGS) $(OBJECTS) $(LIBS)
@echo "Linking complete!"
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cc
@$(CC) $(CFLAGS) -c $< -o $@
@echo "Compiled "$<" successfully!"
运行 make
现在将创建内核二进制文件。
.
├── bin
│ └── kernel
├── Makefile
├── obj
│ └── main.o
└── src
└── main.cc
关于c++ - makefile 错误,从 src 目录中的所有内容构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39176137/