这是我的第一个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文件。它不会编译任何其他文件。
答案 0 :(得分:1)
这是一个问题:
SRCS = *.cc
如果没有wildcard
函数,Make不理解通配符:
SRCS = $(wildcard *.cc)
应该让它运作起来;我们可以稍后进行一些小改进。