为每个源文件创建目标文件,并将它们合并为二进制文件

时间:2014-04-03 12:52:52

标签: makefile solaris

这是我第一次编写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

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)