我有两个源文件,foo.c
和bar.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.c
和bar.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
在foo.c
- 构建
foo
来自foo.c
-
#define BAR
在foo.c
- 构建
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/