这是我第一次编写Makefile。我尝试使用以下Makefile为src文件夹中的每个源文件创建目标文件,合并它们并在bin文件夹中创建二进制文件out.exe。
SRC=src
INC=inc
OBJ=obj
BIN=bin
CC=/usr/sfw/bin/gcc
FLAGS=-g -m64 -Wall
ALL_INC=-I$(INC)
CC_LIBS=-lsocket -lnsl -lpthread -lm -lstdc++ -lclntsh
$(BIN)/out.exe : $(OBJ)/%.o
$(CC) $(ALL_INC) $(FLAGS) -o out.exe
$(OBJ)/%.o : $(SRC)/%.cpp $(INC)/%.h
$(CC) $(ALL_INC) $(FLAGS) -c $<
clean:
rm -f obj/*.o bin/ussd
在调用make时,我收到以下错误。
make: Fatal error: Don't know how to make target `obj/%.o'
下面我给出了我的系统中可用的制作工具列表及其版本
/bin - dmake - Sun Distributed Make 7.7
/usr/bin - dmake - Sun Distributed Make 7.7
/usr/ccs/bin - make - Unknow version
/usr/sfw/bin - gmake - GNU Make 3.80
/usr/xpg4/bin - Unknow version
/usr/local/bin - make - GNU Make version 3.79.1
答案 0 :(得分:0)
问题出在这一行:
$(BIN)/out.exe : $(OBJ)/%.o
$(CC) $(ALL_INC) $(FLAGS) -o out.exe
$(BIN)/out.exe必须知道它依赖的所有文件
添加:
SRCS=$(wildcard $(SRC)/*.cpp) // List all source files
OBJS=$(SRCS:$(SRC)/%.cpp=$(OBJ)/%.o) // List all object files (one for each source file)
然后更改out.exe规则:
$(BIN)/out.exe : $(OBJS)