【发布时间】:2021-07-18 02:01:55
【问题描述】:
我正在尝试使用这个 makefile 编译一个程序:
GCCPARAMS = -m32 -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore
ASPARAMS = --32
objects = src/loader.o src/kernel.o
%.o: src/%.cpp
gcc $(GCCPARAMS) -c -o $@ $<
%.o: src/%.s
echo $(ASPARAMS)
as $(ASPARAMS) -o $@ $<
kernel.bin: linker.ld $(objects)
ld $(LDPARAMS) -T $< -o $@ $(objects)
install: kernel.bin
sudo cp $< boot/mykernel.bin
在执行make 时会出现问题,它会打印以下内容:
as -o src/loader.o src/loader.s
src/loader.s: Assembler messages:
src/loader.s: Warning: end of file not at end of a line; newline inserted
src/loader.s:18: Error: operand type mismatch for `push'
src/loader.s:19: Error: operand type mismatch for `push'
make: *** [<builtin>: src/loader.o] Error 1
正如您所见,变量设置不正确,而是make 在变量应有的位置放置了一个空格。这会导致汇编编译器认为它是 64 位架构并给出一些错误。
知道发生了什么吗?顺便说一句,我正在使用 WSL2 进行此操作。
【问题讨论】:
标签: c++ makefile kernel gnu-make