我有两个源文件,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
醇>
???
答案 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)