我的Makefile正在尝试编译一个不存在/组成的文件名

时间:2012-06-21 17:25:11

标签: makefile

这是我的第一个Makefile,所以我已经剪切并粘贴了我在网上找到的垃圾。我的目录结构非常扁平,并没有考虑过Makefile。它是: 项目/ 项目/控制 项目/ NodeMgmt 项目/通用 项目/接口

我正在编写一个Makefile for Control,并希望它在Control中独立。它需要包括Common和amp;中的编译和包含。接口。这是我的Makefile:

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)

它正在编译它找到的第一个.cc文件&#34; -c Controller.cc -o * .o&#34;这是有意义的,但它是所有它的编译,我得到一个* .o输出文件,而不是一个Controller.o文件。它不会编译任何其他文件。

1 个答案:

答案 0 :(得分:1)

这是一个问题:

SRCS = *.cc

如果没有wildcard函数,Make不理解通配符:

SRCS = $(wildcard *.cc)

应该让它运作起来;我们可以稍后进行一些小改进。