我是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.cpp
insrc
和mylib.h
in组成include
(因此是规则的第一行%.o
)。该文件是使用生成g++
的,它必须查找include
其他头文件,mylib.o
作为输出生成并编译src/mylib.cpp
,但要-c
保证生成.o
文件。
显然,出了点问题,我无法弄清楚是什么。仅在 2 天前,我才知道 Makefile 是什么以及为什么要学习如何处理它们,所以我不是那么专家。