0

これは私の非常に最初の Makefile であり、Web で見つけたがらくたをカット アンド ペーストしました。私のディレクトリ構造はかなりフラットで、Makefile について考えられていませんでした。それは: Project/ Project/Control Project/NodeMgmt Project/Common Project/Interfaces

Control の Makefile を作成していますが、Control 内でスタンドアロンにしたいと考えています。Common & Interfaces からコンパイルしてインクルードする必要があります。ここに私のメイクファイルがあります:

CC = g++

CFLAGS = -Wall -c

INCLUDES = -I/usr/local/include -I/SuperCool/Ion-1.0.0-snapshot-1/include -I/SuperCool/FastrakSDK-4.0.1-snapshot-1/include/Fastrak/Engine/Core/CoreIpc -I/Projects/Common -I/Projects/Interfaces -I/Projects/NodeMgmt -I/Projects/Controller 

LFLAGS = -L/usr/local/lib -L/SuperCool/FastrakSDK-4.0.1-snapshot-1/lib

LIBS = -lCoreIpc4 -lIonOs

VPATH = ../Interfaces/
VPATH = ../Common/
VPATH = ../NodeMgmt/

SRCS = *.cc

OBJS = $(SRCS:.cc=.o)

MAIN = controller

.PHONY: clean

all:    $(MAIN)
    @echo Built Controller

$(MAIN): $(OBJS)
    $(CC) $(CFLAGS) $(INCLUDES) -o $(MAIN) $(OBJS) $(LFLAGS) $(LIBS)

.cc.o:
    $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@

clean:
    $(RM) *.o $(MAIN)

「-c Controller.cc -o *.o」を見つけた最初の.ccファイルをコンパイルしていますが、これは意味がありますが、コンパイルするのはそれだけで、Controller.oファイルではなく*.o出力ファイルを取得します。他のファイルはコンパイルしません。

4

1 に答える 1

1

ここに 1 つの問題があります。

SRCS = *.cc

Make は関数なしではワイルドカードを理解できませんwildcard:

SRCS = $(wildcard *.cc)

これで動作するはずです。後でマイナーな改善を加えることができます。

于 2012-06-21T17:38:58.320 に答える