我有四个文件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
任何人都可以告诉我该怎么做?
答案 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