【发布时间】:2014-08-01 09:43:07
【问题描述】:
我有一个名为 MAKE 的目录和两个子目录的源代码和标题。 source 包含 cpp 文件,header 包含一个包含在所有三个 cpp 文件中的头文件。 我正在尝试创建一个 make 文件。 我正在尝试从目录访问源文件和头文件。我的当前目录是 MAKE(我的 make 文件所在的位置)。
我收到错误,因为没有针对目标的规则。停止 我哪里错了
CC = g++
INC_SOURCE = -I/home/abhiskekkumar/Desktop/VINEETH/Make/source/
INC_DEST = -I/home/abhiskekkumar/Desktop/VINEETH/Make/header
SOURCE = $(shell echo *.cpp)
HEADER = $(shell echo *.h)
OBJECT = $(SOURCE:.cpp=.o)
TARGET = output
EXEC: $(TARGET)
./output
$(TARGET): $(OBJECT)
$(CC) $(INC_SOURCE) $(INC_DEST) -o $(TARGET) $(OBJECT)
【问题讨论】:
-
好吧,首先,期待
$(shell echo *.cpp)在 Make 目录中返回什么?它不会扫描子目录。处理这样的项目布局的推荐方法是使用 GNU Make 中的vpath机制(我假设你正在使用) -
如果不清楚,$(OBJECT) 几乎肯定是空的,除非 Make 目录中有 cpp 文件。
-
我没有使用 vpath。我是初学者。如果我不打算使用 vpath,我需要如何修改 SOURCE = $(shell echo *.cpp) & HEADER = $(shell echo *.h) ?你是对的。如果我的 cpp 文件在 make 目录中,我的 makefile 就会执行。
-
你的源文件放在哪里?如果您不使用它,为什么需要
HEADER?INC_SOURCE和INC_DEST是什么意思?将标头从一个目录复制到另一个目录?.. 但是没有规则这样做。 -
Razor,您正在 Make 目录中执行 shell glob。如果该目录中没有 cpp 文件,则 $OBJECT 将为空。我正在尝试帮助您了解 Make,vpath 是一种更好的方法。如果你坚持自己的方式,那么要么查看
find命令的文档,它确实在子目录中查找,或者使用类似$(wildcard source/*.cpp)之类的东西。阅读Make 手册一个小时将为你节省很多 /i> 痛苦,相信我!
标签: c++ makefile include-path