0

PATH パラメーターを使用してモジュラー makefile を作成したいのですが、方法がわかりません。

これは私が以前持っていたものです:

CC=
CFLAGS=-c -stack-protect
LDFLAGS=
SOURCES=
SSOURCES=
OBJECTS=$(SOURCES:.cpp=.o)
SOBJECTS=$(SSOURCES:.s=.o)
DEBUGFLAGS=-g -DDEBUG
EXECUTABLE=

all: CC += -DNDEBUG
all: $(SOURCES) $(SSOURCES) $(EXECUTABLE)

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

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

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

debug: CFLAGS += $(DEBUGFLAGS)
debug: $(SOURCES) $(SSOURCES) $(LDFLAGS) $(EXECUTABLE)
        $(CC) $(LDFLAGS) $(OBJECTS) $(SOBJECTS) -o $(EXECUTABLE)

clean:
        rm -rf *o $(OBJECTS) $(SOBJECTS)

そして、これは私が多かれ少なかれやろうとしていることです:

PATH=
CC=
CFLAGS=-c -stack-protect
LDFLAGS=
SOURCES=./src1 ./src1
SSOURCES=./src1 ./src2
FSOURCES=$(SOURCES:./=$(PATH))
FSSOURCES=$(SSOURCES:./=$(PATH))
OBJECTS=$(SOURCES:.cpp=.o)
SOBJECTS=$(SSOURCES:.s=.o)
DEBUGFLAGS=-g -DDEBUG
EXECUTABLE=

all: CC += -DNDEBUG
all: $(FSOURCES) $(FSSOURCES) $(EXECUTABLE)

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

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

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

debug: CFLAGS += $(DEBUGFLAGS)
debug: $(FSOURCES) $(FSSOURCES) $(LDFLAGS) $(EXECUTABLE)
        $(CC) $(LDFLAGS) $(OBJECTS) $(SOBJECTS) -o $(EXECUTABLE)

clean:
        rm -rf *o $(OBJECTS) $(SOBJECTS)

どうすればこれを機能させることができますか?

4

1 に答える 1

0

.so にしたいファイルは src2 フォルダーにあり、ビルドおよび作成して実行可能にしたいファイルは src1 フォルダーにあると想定しています。

VPATH = src1:src2:objects:include:libs

CFLAGS= -I ./include -Wall -g -stack-protect

LDFLAGS = -lstdc++
# You can append more libs as required.

CC = gcc


target: $(patsubst ./src1/%.c,./objects/%.o,$(wildcard ./src1/*.c)) ./libs/libmylib.so  
    $(CC) $(patsubst ./src/%.c,./obj_dbg/%.o,$(wildcard ./src/*.c)) $(LDFLAGS) -L ./libs -lmylib -o target

./objects/%.o: ./src/%.c ./include/*.h 
    @mkdir -p ./objects
    $(CC) $(CFLAGS) -c $< -o $@

./libs/libmylib.so: ./src2/%.c ./include/*.h 
    @mkdir -p ./libs
    $(CC) $(CFLAGS) -c $< -o $@ 

Makefile のチュートリアルについては、次のリンクを参照してください。 http://www.tune2wizard.com/linux-makefiles/

于 2013-08-31T12:13:56.697 に答える