我是makefile的新手,他们让我很困惑。我有以下文件夹层次结构:
一个名为的文件夹lib包含两个文件夹:(include带文件mylib.h)和src(带文件mylib.cpp)。它还包含一个 Makefile,由于某种原因,它给了我一个错误。
完整的生成文件是:
CFLAGS = -Wall -fPIC
OBJECTS = mylib.o
all: libmine.so
libmine.so: $(OBJECTS)
g++ -shared $(CFLAGS) \
-o libmine.so \
$(OBJECTS)
%.o: src/%.cpp include/%.h
g++ $(CFLAGS) \
-I include \
-o %.o \
-c src/%.cpp
clean:
rm src/*.o
rm libmine.so
错误是
mr209@Quantum:~/Desktop/hw1/lib$ make
g++ -Wall -fPIC \
-I include \
-o %.o \
-c src/%.cpp
g++: error: src/%.cpp: No such file or directory
g++: fatal error: no input files
compilation terminated.
make: *** [mylib.o] Error 4
但该文件存在。因此,make正在做奇怪的事情,导致它无法找到.cpp文件。
为了制作libmine.so,g++将不得不做一些事情mylib.o, 对于一个通用.o文件我已经写了一些代码行。
这就是我的想法:为了制作libmine.so,g++将不得不对mylib.o. 因此,在 中,必须出现lib一个名为的文件。mylib.o使用通用%.0规则,该文件由mylib.cppinsrc和mylib.hin组成include(因此是规则的第一行%.o)。该文件是使用生成g++的,它必须查找include其他头文件,mylib.o作为输出生成并编译src/mylib.cpp,但要-c保证生成.o文件。
显然,出了点问题,我无法弄清楚是什么。仅在 2 天前,我才知道 Makefile 是什么以及为什么要学习如何处理它们,所以我不是那么专家。