簡體   English   中英

arm-none-eabi-g ++嘗試為桌面而不是arm進行編譯

[英]arm-none-eabi-g++ is trying to compile for desktop instead of arm

我有一個生成文件,調用arm-none-eabi-g ++來編譯一堆文件。 如果我給文件加.c擴展名,它就可以工作。 如果我將擴展名更改為.cc,則似乎g ++正在執行編譯,而不是arm-none-eabi-g ++。 我指定-mcpu = cortex-m0 -mthumb。 這是makefile:

CXX := arm-none-eabi-g++

# -I/usr/lib/arm-none-eabi/include\: since we're compiling with nostdinc and nostdlib, include this directory to grab necessary files
CFLAGS := \
    -nostdinc\
    -I.\
    -I../arch/cortex-m0+\
    -I../devices\
    -I../libc\
    -I/usr/lib/arm-none-eabi/include\
    -O0\
    -ffunction-sections\
    -fdata-sections\
    -Wall\
    -fmessage-length=0\
    -mcpu=cortex-m0\
    -mthumb\
    -mfloat-abi=soft\
    -gdwarf-2\
    -g3\
    -gstrict-dwarf\
    -Wno-unused-but-set-variable\
    -Wno-attributes\
    -fno-builtin\
    -fno-exceptions

objects := \
        ../libc/math.o\
        ../libc/malloc.o    

radio : $(objects)

math.o : ../libc/math.c ../libc/math.h
    $(CXX) $(CFLAGS) -c ../libc/math.c

malloc.o : ../libc/malloc.cc ../libc/malloc.hh
    $(CXX) $(CFLAGS) -c ../libc/malloc.cc


clean :
    rm radio.elf radio.map $(objects)

這是make的輸出:

marlon@marlon-Z68X-UD3H-B3:~/projects/firmware$ make

cc -nostdinc -I. -I../arch/cortex-m0+ -I../devices -I../libc -I/usr/lib/arm-none-eabi/include -O0 -ffunction-sections -fdata-sections -Wall -fmessage-length=0 -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -gdwarf-2 -g3 -gstrict-dwarf -Wno-unused-but-set-variable -Wno-attributes -fno-builtin -fno-exceptions   -c -o ../libc/math.o ../libc/math.c

cc: warning: ‘-mcpu=’ is deprecated; use ‘-mtune=’ or ‘-march=’ instead

cc: error: unrecognized command line option ‘-mthumb’

cc: error: unrecognized command line option ‘-mfloat-abi=soft’

make: *** [../libc/math.o] Error 1

我通過確保在makefile中設置CC和CXX來解決了這個問題:

CC := arm-none-eabi-gcc
CXX := arm-none-eabi-g++

請注意之間的差異

objects := ../libc/math.o ...

math.o: ...

Make的radio規則取決於objects ,因此取決於../libc/math.o 既然不存在,Make就去尋找建立規則。 現在, math.o 在當前目錄是不同的東西../libc/math.o ,所以要認定它想要的東西沒有用戶定義的規則,並最終回落至其隱含規則 (其中建設”。帶有$ CC的c“文件和帶有$ CXX的” .cc“文件)。

換句話說,您的自定義規則適用於不相關的目標-您可以簡單地指定使事情按預期工作的確切路徑,盡管如果您最終想要更通用的內容,則值得一看通配符和模式規則的工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM