我正在使用Minix 2.0.4所以我不能使用gcc。我想使用一个make文件来编译具有多个目标的多个C程序。
这是我的Makefile的当前状态
CFLAGS = -D_POSIX_SOURCE
LDFLAGS =
CC = cc
LD = cc
PROG = prog1 prog2
OBJS = prog1.o prog2.o
$(PROG): $(OBJS)
$(LD) $(LDFLAGS) $(OBJS) -o $(PROG)
clean:
rm -rf $(PROG) $(OBJS)
然而,当我尝试使用我的makefile时,会收到一条错误,上面写着“prog2:无法编译,不适用转换”。关于我做错了什么想法?
答案 0 :(得分:2)
以这种方式拆分:
PROG1 = test
PROG2 = test2
OBJ1 = test.o
OBJ2 = test2.o
all: $(PROG1) $(PROG2)
$(PROG1): $(OBJ1)
$(LD) $(LDFLAGS) $(OBJ1) -o $(PROG1)
$(PROG2): $(OBJ2)
$(LD) $(LDFLAGS) $(OBJ2) -o $(PROG2)
等
如果所有替换让你感到紧张,你可以更简单地说
all: test test1
test: test.o
$(LD) $(LDFLAGS) test.o -o test
test2: test2.o
$(LD) $(LDFLAGS) test2.o -o test2
从头开始删除:
PROG1 = test
PROG2 = test2
OBJ1 = test.o
OBJ2 = test2.o
还有其他快捷方式,但这更具体,更明显。
答案 1 :(得分:0)
要完全按照您的要求进行操作,您根本不需要任何Makefile。 GNU Make有你想要的“内置规则”:
> ls Makefile
ls: cannot access Makefile: No such file or directory
> make prog1 prog2
cc prog1.o -o prog1
cc prog2.o -o prog2
顺便说一下,
> make prog1 prog2
与另外的all: prog1 prog2
目标和
> make all
前者完全独立地构成第一个目标,然后是第二个目标,就像在两个连续的调用中一样。第二个,使它们在一次调用中:对于大型makefile可能更快,如果使用-j ...
调用可能并行,并且可能具有不同的消息输出。