是否可以使用CC编译器编译多个目标文件?

时间:2013-10-09 00:35:08

标签: c makefile cc

我正在使用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:无法编译,不适用转换”。关于我做错了什么想法?

2 个答案:

答案 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 ...调用可能并行,并且可能具有不同的消息输出。