簡體   English   中英

gcc無效的命令行選項

[英]gcc invalid command-line options

在gcc中使用此Makefile進行編譯時,出現了錯誤

cannot specify -o with -c, -S or -E with multiple files"

現在,我想這與嘗試兩次編譯同一文件有關,但我不知道如何做。

assembler : main.o assembler.o utils.o
    gcc -g -ansi -Wall -pedantic -lm main.o assembler.o utils.o -o assembler
main.o : main.c assembler.h utils.h
    gcc -c -ansi -Wall -pedantic -lm main.c assembler.h utils.h -o main.o
assembler.o : assembler.c
    gcc -c -ansi -Wall -pedantic -lm assembler.c -o assembler.o
utils.o : utils.c structs.h
    gcc -c -ansi -Wall -pedantic -lm utils.c structs.h -o utils.o

文件包括如下:

structs.h is included in utils.c,
utils.c is included in utils.h,
utils.h is included in assembler.c,
assembler.c is included in assembler.h,
assembler.h is included in main.c.

(:不知道為什么,這讓我以代碼形成的方式來做...

您的makefile錯誤地將所有依賴項添加到了compile命令,而不僅僅是第一個依賴項。 結果是您試圖將頭文件編譯為翻譯單元,這是不合適的。

link命令中添加所有依賴關系是正確的,該命令將多個目標文件組合成一個可執行文件。 但是,如錯誤消息所示,使用-c選項創建目標文件時,無法提供多個源文件。

因此,編譯配方通常將使用$< (第一個依賴項),而鏈接配方將使用$^ (所有依賴項)。 請參見制造手冊的“ 自動變量”一章

您可能需要此makefile(只需從gcc命令中刪除.h文件):

assembler : main.o assembler.o utils.o
    gcc -g -ansi -Wall -pedantic -lm main.o assembler.o utils.o -o assembler

main.o : main.c assembler.h utils.h
    gcc -c -ansi -Wall -pedantic main.c -o main.o

assembler.o : assembler.c
    gcc -c -ansi -Wall -pedantic assembler.c -o assembler.o

utils.o : utils.c structs.h
    gcc -c -ansi -Wall -pedantic utils.c -o utils.o

也許更好的方法:

assembler:: main.o assembler.o utils.o
    gcc -o $@ main.o assembler.o utils.o -lm
.c.o:
    gcc -c  -g -ansi -Wall -pedantic $*.c

暫無
暫無

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

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