我正在尝试重新组织某人的代码,而我似乎已经碰壁了。
我在int fnc()
中有一个由fnc.c
或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
唯一的问题是,有两个头文件header1.h
和header2.h
要包含在fnc.c
的前导码中,具体取决于main1.x或main2.x是否为编译:
#include "header1.h"
int fnc(){
// do stuff
}
是否可以选择要加载哪个标头,具体取决于是make main1
还是make main2
?
答案 0 :(得分:3)
您可以使用-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
}