Makefile 为什么选择target';mykernel.bin';失败?
我正在尝试使用Ubuntu创建一个简单的mykernel.bin文件Makefile 为什么选择target';mykernel.bin';失败?,makefile,Makefile,我正在尝试使用Ubuntu创建一个简单的mykernel.bin文件 GPPPARAM = -m32 -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exception -fno-leading-underscore ASPARAMS = --32 LDPARAMS = -m elf_i386 objects = loader.o kernel.o %o: %.cpp g++ $(GPPPARAM) -o $@ -c
GPPPARAM = -m32 -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exception -fno-leading-underscore
ASPARAMS = --32
LDPARAMS = -m elf_i386
objects = loader.o kernel.o
%o: %.cpp
g++ $(GPPPARAM) -o $@ -c $<
%o: %.s
as $(ASPARAMS) -o $@ $<
mykernel.bin : linker.ld $(objects)
ld $(LDPARAMS) -T $< -o $@ $(objects)
GPPPARAM=-m32-fno使用cxa-atexit-nostdlib-fno内置-fno rtti-fno异常-fno前导下划线
天冬氨酸=--32
LDPARAMS=-m elf_i386
objects=loader.o kernel.o
%o:%的cpp
g++$(GPPPARAM)-o$@-c$<
%o:%
as$(ASPARAMS)-o$@$<
mykernel.bin:linker.ld$(对象)
ld$(LDPARAMS)-T$<-o$@$(对象)
输出为:
生成mykernel.bin
ld-m elf_i386-T linker.ld-o mykernel.bin loader.o kernel.o ld:i386:x86-64输入文件
loader.o”的体系结构与i386输出不兼容
输入文件的ld:i386:x86-64体系结构
kernel.o'与i386输出不兼容
Makefile:13:目标“mykernel.bin”的配方失败
make:**[mykernel.bin]错误1如果要显示完整的输出,包括目标文件的编译行,那么很明显编译器标志没有用于编译源代码。因此,生成的对象文件是针对本机操作系统的,当您需要32位时,本机操作系统很可能是64位的 原因正如我上面所描述的:您的模式规则是错误的。当您想编写
%时,您已经编写了%o:%.cpp
。o:%.cpp
。您编写的模式规则告诉make,如果它想构建一个文件loader.o
(因此模式%o
的词干与loader.
)它可以通过编译一个文件loader..cpp
(因为%.cpp
中的模式字符%
替换为词干加载器。
)。由于没有loader..cpp
文件,您的模式将被丢弃为不匹配,并继续查找另一个模式,然后作为内置规则找到一个
但是,由于您使用的是非标准变量名GPPPARAM
,而不是标准的cxflags
,因此默认规则不使用任何标志
您有两种选择:您可以修复模式规则,使其正确:
%.o: %.cpp
g++ $(GPPPARAM) -o $@ -c $<
%.o: %.s
as $(ASPARAMS) -o $@ $<
如果你有问题,请提出来。包括您调用的命令、您得到的输出,以及您不希望得到该输出的原因。只要看一下您的makefile,我就可以看出它是错误的:
%o:%.cpp
应该是%.o:%.cpp
(注意%
和o
之间的时间段).ld-m elf_i386-T linker.ld-o mykernel.bin loader.o kernel.o ld:i386:x86-64输入文件的体系结构loader.o'与i386输出不兼容ld:i386:x86-64输入文件的体系结构kernel.o'与i386输出生成文件不兼容:13:目标'mykernel.bin'的配方生成失败:**[mykernel.bin]错误1请编辑您的问题并将信息放在可以正确格式化的位置,而不是放在评论中。
CXX := g++
CXXFLAGS := -m32 -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exception -fno-leading-underscore
AS := as
ASFLAGS := --32