编写makefile来编译特定的模块

时间:2014-02-28 10:04:15

标签: c makefile

我有四个文件a.c b.c c_arm.c和头文件header.h 我写了一个make文件,但是当只做make并执行二进制文件时它应该打印I am in c-arm但是当我执行make ARM=arch并且当我执行最终的二进制文件时,它应该打印{ {1}}

但在我的情况下,它总是打印I am in c-armx86

你能告诉我怎么写一个make文件来实现上面的东西,这里是我的文件

I am in c-arm

a.c

#include "header.h"
int main () {
   call_b();
}

b.c

#include "header.h"

void call_b()    {
#ifdef ARCH
  carmx86();
#else
  carm();
#endif
}

c_arm.c

#include "header.h"
carm() {
    printf ("I am in c-arm\n");
}

c_armx86.c

#include "header.h"
void carmx86() {
    printf( "I am in c-armx86 \n" );
}

当我说make Makefile all: a.o b.o c_arm.o c_armx86.o gcc -o output a.o b.o c_arm.o c_armx86.o a.o: a.c gcc -c a.c b.o: b.c gcc -c b.c c_arm.o: c_arm.c gcc -c c_arm.c c_armx86.o: c_armx86.c gcc -c c_armx86.c clean: rm *.o output 它应该打印我在c-armx86,如果我只是做一个make并执行二进制它应该打印我在c-arm

任何人都可以告诉我该怎么做?

1 个答案:

答案 0 :(得分:1)

你需要将-D ARCH = arm传递给编译器,即:

ifdef ARCH
b.o: b.c
      gcc -D ARCH=$(ARCH) -c b.c
else
b.o: b.c
      gcc -c b.c
endif

或同等的:

b.o: b.c
ifdef ARCH
      gcc -D ARCH=$(ARCH) -c b.c
else
      gcc -c b.c
endif
相关问题