【发布时间】:2014-05-15 07:49:21
【问题描述】:
这是我第一次编写 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'
下面我列出了我的系统中可用的 make 工具及其版本
/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
【问题讨论】:
-
你在使用 GNU make 吗?还是某种 Solaris 制造的?因为该错误不是任何版本的 GNU make 都会打印的消息。 POSIX 标准没有为 make 指定模式规则,因此不同的版本以不同的方式实现它们(或根本不实现它们):您应该指定您正在使用的 make 实现。
-
如何找到make实现细节
-
使用
man make查看手册页并查看哪些选项可用于显示这些详细信息,或运行make -v、make --version、make -version、make -h或make --help,其中一项或多项可能会为您提供该信息。 -
我在 Solaris 环境中。您给出的命令均未显示版本。使用 man 命令我找到了这个 SunOS 5.10
-
如果这些都不起作用,那么你肯定没有使用 GNU make。