簡體   English   中英

具有源子目錄的單個頂級makefile

[英]Single top-level makefile with source subdirectories

首先,對我的無知表示歉意。 我確定問題的答案存在於此處許多現有的makefile線程之一中。 但是,我找不到一個簡潔明了地回答我的特定問題的答案,而又沒有用與我的特定情況無關的細節來使答案模糊不清。

我的代碼目錄只有一個包含main的頂級源文件。 其余的源文件根據系統中的邏輯划分按子目錄組織。 該代碼在include中不包含相對路徑。 這意味着,如果使用以下簡單的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,這有助於保留我的無知。 現在是時候分發我的代碼供公眾使用了,所以我希望生成一個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)

在這里您可以提供多個源目錄。

如果代碼位於多個目錄中,並且使用您已經擁有的同一個makefile,那么“一切都可以正常工作”。 無需更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM