gpt4 book ai didi

c - 编写 makefile 来编译特定模块

转载 作者:行者123 更新时间:2023-11-30 15:37:45 25 4
gpt4 key购买 nike

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

但就我而言,它总是打印I am in c-arm

你能告诉我如何编写一个make文件来实现上述的事情,这是我的文件

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" );
}
<小时/>
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

当我说 make ARCH=arm 时,它应该打印 I am in c-armx86,如果我只是执行 make 并执行二进制文件,它应该打印 I am in c-arm

谁能告诉我该怎么做?

最佳答案

您需要将 -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

关于c - 编写 makefile 来编译特定模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22091960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com