我试过制作一个makefile。我有以下文件夹结构。
Source
- include
- My headerfiles
- objects
- The object files
- src
- My source files
我的问题是找不到src目录中的源文件。
我的make文件如下所示。
# gcc for C
# g++ for c++
CC = gcc
#compiler flags
# -g adds debugging information to the executebells
# -Wall
CFLAGS = -g -Wall
#target
TARGET = gabe_the_dog_server
#directory for the object files
OBJDIR = ./objects
SRCDIR = ./src
default: $(TARGET)
all: default
HEADERS = $(wildcard include/*.h)
OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
$(OBJDIR)/%.o: $(SRCDIR)/%.c $(HEADERS)
$(CC) $(CFLAGS) -c $< -o $@
$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) $(CFLAGS) $(LIBS) -o $(OBJDIR)/$@
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
-rm -f *.o
-rm -f $(TARGET)
答案 0 :(得分:0)
建议您将此路径放在名为cannot convert string to json obj
的特殊变量中,而不是使用源文件的路径。然后你只需提到你的源文件,如下所示:
VPATH
GNU OBJDIR = ./obj
SRCDIR = ./src
VPATH = $(SRCDIR)
OBJECTS = $(addprefix $(OBJDIR)/, foo.o bar.o)
all: $(OBJECTS)
$(OBJDIR)/%.o: %.c
$(cc) ...
将在make
中查找目标先决条件的文件中的文件夹。请注意,如果您有多个文件夹,您可以找到多次相同的文件名,则可能会出现问题。
见GNU make VPATH manual。如果您需要有关VPATH良好实践的其他示例,请参阅此链接:Mad Scientist: How not to use VPATH
答案 1 :(得分:0)
下面:
OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
您使用变量SOURCES
,但您从未定义它。你还需要一行:
SOURCES = $(wildcard $(SRCDIR)/*.c)
OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o)