我之前看过这个问题,但无法解读这些答案。
让我说我驻留在工作目录中,让我们称之为proj,这个proj目录包含src文件夹,其中包含所有* .cpp文件。我想编译保留在proj目录中的那些文件,因为将来我将创建bin目录并将* .o和二进制文件放在bin中。
所以我的proj目录目前包含:Makefile和src
到目前为止,我所做的是:
SOURCE = src
# This gives the path to the proj directory
CURRENT_DIR = $(shell pwd)
# This gives list of all the *.cpp files
SRC = $(shell cd $(SOURCE) && echo *.cpp)
# Here all the name of the files stored in SRC are converted from *.cpp to *.o
OBJS = $(SRC:.cpp=.o)
.PHONY: all
all: $(TARGE)
# use the content of SRC to compile
$(TARGET): $(OBJS)
$(info $(OBJS))
$(OBJS): $(SRC)
$(CC) $(FLAGS) -c $?
当我尝试运行make命令时,它说
make:***没有规则来制作'xxx.cpp'所需的目标'xxx.cpp'。停止
现在我知道它想说的是什么。它给出了错误,因为虽然它知道文件的名称,但由于文件不在当前目录中,因此makefile不知道src文件夹,因此对* .cpp文件没有任何线索。
所以我的问题是:在makefile中是否有任何宏或技巧可以确保makefile在停留在当前目录中时看到src文件夹中的xxx.cpp(我不想在这里手动指定文件夹) ?