如何编写Makefile以从一个源生成两个可执行文件?

时间:2017-05-12 20:39:36

标签: c function makefile macros gnu-make

我有两个源文件,foo.cbar.c。我有一个Makefile来构建它们:

OBJ1 := foo.o
OBJ2 := bar.o
EXE1 := foo
EXE2 := bar

all: $(EXE1) $(EXE2)

$(EXE1): $(OBJ1)
    gcc $(OBJ1) -o $(EXE1)

$(EXE2): $(OBJ2)
    gcc $(OBJ2) -o $(EXE2)

然后我意识到foo.cbar.c除了一个函数外是相同的。所以我删除了bar.c并在foo.c中将#if defined()放在函数周围,如下所示:

#if defined(FOO)
void function(int blah) { /* do what foo does */ }
#elif defined(BAR)
void function(int blah) { /* do what bar does */ }
#endif

如何将Makefile重写为:

    #define FOO
  1. foo.c
  2. foo
  3. 构建foo.c#define BAR
  4. foo.c
  5. bar
  6. 构建foo.c

    ???

1 个答案:

答案 0 :(得分:1)

使用GCC的-D选项定义宏,并删除目标文件:

SRC := foo.c
EXE1 := foo
EXE2 := bar

all: $(EXE1) $(EXE2)

$(EXE1):
        gcc -DFOO $(SRC) -o $(EXE1)

$(EXE2):
        gcc -DBAR $(SRC) -o $(EXE2)