繁体   English   中英

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

[英]How can I write a Makefile to produce two executables from one source?

我有两个源文件, 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 bar.c #if defined() bar.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重写为:

  1. #define FOOfoo.c #define FOO
  2. foo.c构建foo
  3. #define BARfoo.c #define BAR
  4. foo.c构建bar

???

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

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

all: $(EXE1) $(EXE2)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM