使文件有两个主文件

时间:2012-01-25 20:00:41

标签: c linux makefile

我是Makefile的新手,想问一个关于Makefiles的问题。假设我有两个独立的程序,它们有自己的.c .h和main.c文件。没有任何程序链接。有可能制作这种程序的两个可执行文件吗?如果是这样,怎么可能?我试过这个但它失败了,我得到了以下错误:

/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status

3 个答案:

答案 0 :(得分:7)

在您的makefile中,您可以拥有多个目标。例如:

all: A B

A: mainA.c
    $(CC) -o $@ $^

B: mainB.c
    $(CC) -o $@ $^

然后make A只会构建A,make B只会构建B,而make all(或只是make)会构建两者。

答案 1 :(得分:2)

如果两个程序有一个main.c文件,那么你必须将它们放在两个单独的目录中。然后,在每个目录中编写一个makefile,在顶层目录中编写一个makefile,将其复制到这两个子makefiles中。

/
  Makefile
  prog0/
    Makefile
    main.c
    ...
  prog1/
    Makefile
    main.c
    ...

prog0 / Makefile看起来像这样:

all: prog0
prog0: prog0.o
    $(LINK.c) $(OUTPUT_OPTION) $^

重复prog1。然后,在父目录中,编写一个递归的makefile:

all:
    $(MAKE) --directory prog0 all
    $(MAKE) --directory prog1 all

答案 2 :(得分:0)

您需要两次调用链接器,以创建两个不同的程序。

在程序中,只能存在一个“main”。问题可能源于将两个“.c”文件(每个包含一个主文件)编译成两个“.o”文件,然后尝试用两个“.o”文件创建一个可执行文件。编译器的难题(不允许)是“哪个主要开头”?

解决此问题的一种快速方法是将主电源分离为相应的“mainXXX.c”文件,然后确保每个输出可执行文件仅引用一个“mainXXX.o”文件。其他解决方案也存在。制作一个适合您需求的产品。