根据Makefile中的指令选择不同的头文件

时间:2018-05-30 19:10:26

标签: c makefile header-files code-organization

我正在尝试重新组织某人的代码,而我似乎已经碰壁了。 我在int fnc()中有一个由fnc.cmain1.c调用的函数main2.c。使用makefile从main1.cmain2.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.hheader2.h要包含在fnc.c 的前导码中,具体取决于main1.x或main2.x是否为编译

#include "header1.h"

int fnc(){
    // do stuff
}

是否可以选择要加载哪个标头,具体取决于是make main1还是make main2

1 个答案:

答案 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
}
  • 注意 - 这既不是测试也不是最佳解决方案。只是提出想法