gpt4 book ai didi

c++ - 具有源子目录的单个顶级 makefile

转载 作者:行者123 更新时间:2023-11-28 06:37:22 25 4
gpt4 key购买 nike

首先为我的无知道歉。我确信我的问题的答案存在于此处许多现有的 makefile 线程之一中。但是,我一直无法找到一个既能简明扼要地回答我的具体问题又不会用与我的特定情况无关的细节混淆答案的答案。

我的代码目录有一个包含 main.c 的顶级源文件。其余的源文件根据系统中的逻辑分区组织在子目录中。该代码在 includes 中不包含相对路径。这意味着如果使用以下简单的 makefile 将所有代码都放在一个目录中,一切都会完美运行:

CC=g++
CFLAGS=-c
LDFLAGS=
SOURCES=Main.cpp Source1.cpp Source2.cpp Source3.cpp Etc.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=executable

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
$(CC) $(CFLAGS) $< -o $@

到目前为止,我一直在使用 NetBeans IDE 构建我的代码。这有助于通过代表我生成一些庞大且过于复杂的 makefile 来保持我对 make 的无知。现在是分发我的代码供公众使用的时候了,所以我希望生成一个 makefile 使我能够分发具有我拥有的目录结构的代码。

你能帮忙吗?

问候,热情的业余爱好者。

最佳答案

看看这个:

# Source directories separated by space
# Example ./ src1/ src2/
SRCDIR = ./ src/
# Directory where object files will be placed
OBJDIR = obj/
# Include directories separated by space
# Example: include1/ include2/
INCDIR = include/
# Directory where binary file will be placed
BINDIR = bin/
# Name of the result file
TARGET = app
# Compiler
CXX = g++

# Retrive list of the source files
SRC = $(wildcard $(addsuffix *.cpp,$(SRCDIR)))
# Generate list of the object files
OBJ = $(addprefix $(OBJDIR), $(patsubst %.cpp, %.o, $(notdir $(SRC))))

VPATH = $(SRCDIR)

# Compilation flags
CXXFLAGS = -std=c++11 -pthread

$(TARGET) : $(OBJ)
@echo Linking...
@mkdir -p $(BINDIR)
@$(CXX) $(CXXFLAGS) -o $(BINDIR)$@ $(OBJ)

$(OBJDIR)%.o : %.cpp
@echo Compiling $< in $@...
@mkdir -p $(OBJDIR)
@$(CXX) $(CXXFLAGS) $(addprefix -I,$(INCDIR)) -c -o $@ $<

clean :
@$(RM) -r $(OBJDIR)
@$(RM) -r $(BINDIR)

这里可以提供多个源目录。

关于c++ - 具有源子目录的单个顶级 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26573923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com