以下是我的makefile。但是在构建过程中没有采用包含路径。
SHELL = /bin/sh
CC = g++
FLAGS =
CFLAGS = -fPIC
TARGET = my_bridge.so
INC=-I/my_custom_path/include/ -I/my_custom_path/include/linux
SOURCES = $(shell echo *.cpp)
HEADERS = $(shell echo *.h)
OBJECTS = $(SOURCES:.cpp=.o)
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(CC) $(FLAGS) $(INC) $(CFLAGS) -o $(TARGET) $(OBJECTS)
当我建立时,我得到以下行
g++ -c -o my_bridge.o my_bridge.cpp
答案 0 :(得分:4)
您的$(TARGET): $(OBJECTS)
规则告诉您如何从my_bridge.so
生成my_bridge.o
,但您还没有提供一条规则来解释如何首先制作my_bridge.o
。 make
依赖于它的隐含规则,它为您提供了所见的命令。您可以定义自己的规则来编译.cpp
文件,例如
%.o: %.cpp
$(CC) $(FLAGS) $(INC) $(CFLAGS) -o $@ $<
或将您的include指令放在$(CXXFLAGS)
中,make
的默认规则使用该指令(参见https://www.gnu.org/software/make/manual/html_node/Catalogue-of-Rules.html#Catalogue-of-Rules)