0

我使用的是 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:无法编译,不应用转换”。关于我做错了什么的任何想法?

4

2 回答 2

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)

ETC

如果所有这些替代让您感到紧张,您可以更简单地说

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

还有其他捷径,但这更具体和明显。

于 2013-10-09T00:46:33.627 回答
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 ...,并且可能使用不同的消息输出。

于 2013-10-09T05:04:13.007 回答