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

标签 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 重写为:

  1. #define FOOfoo.c
  2. 构建 foo来自foo.c
  3. #define BARfoo.c
  4. 构建 bar来自foo.c

???

最佳答案

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

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

all: $(EXE1) $(EXE2)

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

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

关于c - 如何编写 Makefile 以从一个源生成两个可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43946142/

相关文章:

c - 如何使用 Pro*C 连接到数据库?

c - c中的"not all control paths return a value",分数歧视

c - 简单的 C 程序由于没有明显原因而无法运行

javascript - 函数调用后 Vuejs 数据属性不会被覆盖

c++ - 如何将 makefile 从生成可执行文件更改为生成共享库

makefile - 在赋值时计算 Makefile 变量

c - 如何从定义初始化 char[]

MATLAB:我可以以某种方式使用函数作为第一类对象吗?

识别跨列的特定事件以创建新变量

c - GCC 与 mysql 库编译