根据 Makefile 的说明选择不同的 header 文件

Choosing different header file depending on instructions from Makefile

我正在尝试重组某人的代码,但我似乎碰壁了。 我在 fnc.c 中有一个函数 int fnc(),它被 main1.cmain2.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

唯一的问题是,有两个 header 文件 header1.hheader2.h 要包含在 fnc.c 的序言中,具体取决于是否main1.x或main2.x编译:

#include "header1.h"

int fnc(){
    // do stuff
}

是否可以select根据类型make main1make 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
}
  • 注意 - 这既没有经过测试也不是最佳解决方案。只是给出想法