根据 Makefile 的说明选择不同的 header 文件
Choosing different header file depending on instructions from Makefile
我正在尝试重组某人的代码,但我似乎碰壁了。
我在 fnc.c
中有一个函数 int fnc()
,它被 main1.c
或 main2.c
调用。使用 makefile 从 main1.c
或 main2.c
编译可执行文件:
main1: main1.o fnc.o
gcc main1.o fnc.o -o main1.x
main2: main2.o fnc.o
gcc main2.o fnc.o -o main2.x
main1.o: main1.c
gcc -c main1.c
main2.o: main2.c
gcc -c main2.c
fnc.o:
gcc -c fnc.c
唯一的问题是,有两个 header 文件 header1.h
和 header2.h
要包含在 fnc.c
的序言中,具体取决于是否main1.x或main2.x编译:
#include "header1.h"
int fnc(){
// do stuff
}
是否可以select根据类型make main1
或make main2
加载哪个header?
您可以使用 -D
编译器标志来定义预处理器可见的符号。然后用预处理器 #ifdef
指令检查它。如:
生成文件:
main1: main1.o fnc1.o
gcc main1.o fnc1.o -o main1.x
main2: main2.o fnc2.o
gcc main2.o fnc2.o -o main2.x
main1.o: main1.c
gcc -c main1.c
main2.o: main2.c
gcc -c main2.c
fnc1.o:
gcc -o fnc1.o -c fnc.c -DCONFIG1
fnc2.o:
gcc -o fnc2.o -c fnc.c -DCONFIG2
你的消息来源:
#ifdef CONFIG1
#include "header1.h"
#elif defined(CONFIG2)
#include "header2.h"
#else
#error "blah"
#endif
int fnc(){
// do stuff
}
- 注意 - 这既没有经过测试也不是最佳解决方案。只是给出想法
我正在尝试重组某人的代码,但我似乎碰壁了。
我在 fnc.c
中有一个函数 int fnc()
,它被 main1.c
或 main2.c
调用。使用 makefile 从 main1.c
或 main2.c
编译可执行文件:
main1: main1.o fnc.o
gcc main1.o fnc.o -o main1.x
main2: main2.o fnc.o
gcc main2.o fnc.o -o main2.x
main1.o: main1.c
gcc -c main1.c
main2.o: main2.c
gcc -c main2.c
fnc.o:
gcc -c fnc.c
唯一的问题是,有两个 header 文件 header1.h
和 header2.h
要包含在 fnc.c
的序言中,具体取决于是否main1.x或main2.x编译:
#include "header1.h"
int fnc(){
// do stuff
}
是否可以select根据类型make main1
或make main2
加载哪个header?
您可以使用 -D
编译器标志来定义预处理器可见的符号。然后用预处理器 #ifdef
指令检查它。如:
生成文件:
main1: main1.o fnc1.o
gcc main1.o fnc1.o -o main1.x
main2: main2.o fnc2.o
gcc main2.o fnc2.o -o main2.x
main1.o: main1.c
gcc -c main1.c
main2.o: main2.c
gcc -c main2.c
fnc1.o:
gcc -o fnc1.o -c fnc.c -DCONFIG1
fnc2.o:
gcc -o fnc2.o -c fnc.c -DCONFIG2
你的消息来源:
#ifdef CONFIG1
#include "header1.h"
#elif defined(CONFIG2)
#include "header2.h"
#else
#error "blah"
#endif
int fnc(){
// do stuff
}
- 注意 - 这既没有经过测试也不是最佳解决方案。只是给出想法